{filelink=19}
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class ExCryptageDigest
{
/*
* Lire un fichier
* Crypter le fichier avec
* l'algorithme de chiffrage
*/
public static void main(String[] args)
throws IOException, GeneralSecurityException {
String fichier = "c:/test.txt"; // Le fichier à crypter
String password = "sakoba2008"; // Le mot de passe(8 caractères minimum)
if (password.length() < 8 )
{
System.err.println("Mot de passe trop court");
}
FileInputStream fin = new FileInputStream(fichier);
FileOutputStream fout = new FileOutputStream(fichier +".des");
FileOutputStream fichier_digest = new FileOutputStream(fichier + ".des.digest");
// Créer la clé à partir de mot de passe.
byte[] desKeyData = password.getBytes();
DESKeySpec desKeySpec = new DESKeySpec(desKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey desKey = keyFactory.generateSecret(desKeySpec);
// Chiffrer les données.
Cipher des = Cipher.getInstance("DES/ECB/PKCS5Padding");
des.init(Cipher.ENCRYPT_MODE, desKey);
CipherInputStream cin = new CipherInputStream(fin, des);
// Appliquer l'algorithme 'SHA digest'.
MessageDigest sha = MessageDigest.getInstance("SHA");
DigestInputStream din = new DigestInputStream(cin, sha);
byte[] input = new byte[64];
while (true) {
int bytesRead = din.read(input);
if (bytesRead == -1) break;
fout.write(input, 0, bytesRead);
}
fichier_digest.write(sha.digest());
fichier_digest.close();
din.close();
fout.flush();
fout.close();
}
}