Voilà, j’enregistre les login et les passwords des utilisateurs dans un fichier. Bien sûr le but est de crypter le mot de passe. Mais il y a quelque part une erreur qui fait qu’au décryptage les mots de passes de correspondent plus… Et il s’agit que d’un seul caractère qui diffère lorsque j’affiche en String les deux tableaux de bytes des deux mots de passes comparés. Voici donc le bout de mes codes:
[codebox]public void setPassword(String login, String motDePasse, int droit){
[ … ]
pass = readFixedLengthByte(PASS_SIZE, file);
file.close();
[ … ]
MessageDigest messageDigest = MessageDigest.getInstance(“MD5”);
byte[] mdpBytes = motDePasse.getBytes();
messageDigest.reset();
messageDigest.update(mdpBytes);
writeFixedLengthByte(messageDigest.digest(mdpBytes), PASS_SIZE, file);
[ … ]
}[/codebox]
[codebox]public void verifyPassword(String login, String motDePasse) throws LoginEchoueException{
[ … ]
messageDigest = MessageDigest.getInstance(“MD5”);
byte[] mdp = motDePasse.getBytes();
messageDigest.reset();
messageDigest.update(mdp);
mdp = messageDigest.digest(mdp);
mdp = fixLengthByte(mdp, PASS_SIZE);
System.out.println(new String(mdp));
System.out.println(new String(pass));
if(!MessageDigest.isEqual(mdp, pass)) throw new LoginEchoueException();
[ … ]
}[/codebox]
Et les deux println (qui sont là juste pour vérifier le truc) me donnent un truc du style:
[codebox]t¸s7EB ÔÓ?€Äf=Åå
t¸s7EB ÔÓ?¬Äf=Åå[/codebox]
Je ne sais pas si on peut vraiment comparer des données cryptées mais voilà…
La méthode “writeFixedLengthByte” écrit dans le fichier le tableau de byte en complétant par des blancs (puisque j’utilise un RandomAccessFile).
La méthode “ReadFixedLengthByte” le lit de la même façon.
La méthode “fixLengthByte” renvoie simplement le tableau de byte complété par des blancs (afin de pouvoir comparer).
Voici ces méthodes:
[codebox]private byte[] readFixedLengthByte(int size, DataInput in)throws IOException{
byte[] bytes = new byte;
for(int i=0; i<size; i++){
bytes[i] = in.readByte();
}
return bytes;
}
private byte[] fixLengthByte(byte[] tab, int size){
byte[] bytes = new byte;
int i;
for(i=0; i<tab.length; i++){
bytes[i] = tab[i];
}
for(; i<bytes.length; i++){
bytes[i] = ’ ';
}
return bytes;
}
private void writeFixedLengthByte(byte[] tab, int size, DataOutput out)throws IOException{
out.writeBytes(new String(fixLengthByte(tab, size)));
}[/codebox]
Voilà, et il n’y a apparement aucune erreurs du coté de l’écriture du fichier.
Je ne suis pas non plus très sûr d’avoir totalement compris les méthodes digest, reset et update de la classe MessageDigest…
Merci d’avance à celui ou celle qui m’aidera. B)