J'essaye de comparer 2 mots de passes hashés.

L'un provient d'un fichier texte encodé en UTF-8, l'autre provient d'une connexion réseau.

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
                String encodedPassword = encodePassword(password);
 
 
                System.out.println ("login " + login);
                System.out.println ("log " + log);
                System.out.println ("comparison " + login.compareTo(log) +  " " + pass.compareTo(encodedPassword));
                System.out.println ("password " + encodedPassword);
                System.out.println ("pass " + pass);
 
                byte[] passBytes = pass.getBytes();
                String passInHexa = ""; 
                for(int i=0;i<passBytes.length;i++){ 
                    String s = Integer.toHexString(passBytes[i]); 
                    if(passBytes[i]<0)s = s.substring(s.length()-2); 
                    passInHexa+=s; 
                }
                byte[] passwordBytes = password.getBytes();
                String passwordInHexa = ""; 
                for(int i=0;i<passwordBytes.length;i++){ 
                    String s = Integer.toHexString(passwordBytes[i]); 
                    if(passwordBytes[i]<0)s = s.substring(s.length()-2); 
                    passwordInHexa+=s; 
                } 
 
                System.out.println("bytes message crypté = " + passwordInHexa + " " + passInHexa + " " + pass.equals(password));
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public String encodePassword(String passwordToEncode) 
    { 
         java.security.MessageDigest d =null; 
         try 
         { 
            d = java.security.MessageDigest.getInstance("SHA"); 
            d.reset(); 
            d.update(passwordToEncode.getBytes()); 
            //return new String(d.digest(),0,d.digest().length,"UTF-8"); 
            byte[] b = d.digest(); 
            return new String(b,0,b.length,"UTF-8"); 
         } catch (Exception e) 
         { 
         } 
         return passwordToEncode; 
    }
Et voici la sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
login cedric
log cedric
comparison 0 -65470
password ?65?l???:??X?
pass ?65?l???:??X?
bytes message crypté = 416368696c653232 3f6f36353f6c3f3f3f3a1e3f3f17583f false
A priori, les 2 chaînes pass et password ont l'air identiques. Pourtant le pass.equals(password) renvoie false.
Quand on décompose les chaînes en question, on s'apperçois qu'elles ne sont pas égale.
J'ai pourtant utilisé l'UTF-8 tout le long du programme.
pass vaut 3f6f36353f6c3f3f3f3a1e3f3f17583f tandis que password vaut 416368696c653232.
D'ou vient cette différence?
Est-ce qu'il faut que j'encode mon fichier dans un autre format?
Est-ce que le fait de passer par les sockets java a un effet sur l'encodage?

Comment comparer 2 chaînes qui auraient un encodage différent?