L'algorithme MessageDigest SHA1 de Java renvoie un résultat différent de celui de la fonction SHA1 de php

J'ai une table SQL avec des noms d'utilisateur et mots de passe. Les mots de passe sont codés à l'aide de MessageDigest s digest() la méthode. Si j'ai coder un mot de passe, disons "abcdef12" - avec MessageDigest s digest() la méthode et ensuite le convertir en valeurs hexadécimales, la Chaîne est différent que si je fais la même chose à l'aide de PHP SHA1-méthode. Je m'attends à ces valeurs pour être exactement le même.

Code qui est utilisé pour coder les mots de passe:

MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] passbyte;
passbyte = "abcdef12".getBytes("UTF-8");
passbyte = md.digest(passbyte);

La conversion de la Chaîne en hexadécimal est fait à l'aide de cette méthode:

public static String convertStringToHex(String str) {

    char[] chars = str.toCharArray();

    StringBuffer hex = new StringBuffer();
    for (int i = 0; i < chars.length; i++) {
        hex.append(Integer.toHexString((int) chars[i]));
    }

    return hex.toString();
}

Mot de passe: abcdef12

Voici le mot de passe tel que retourné par beaucoup de hachage SHA1 en ligne des générateurs et PHP SHA1()-fonction: d253e3bd69ce1e7ce6074345fd5faa1a3c2e89ef

Voici le mot de passe codé par MessageDigest: d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef

Suis-je oublier quelque chose?

Igor.

Edit: j'ai trouvé quelqu'un avec un problème similaire: C# SHA-1 vs PHP SHA-1...à des Résultats Différents? . La solution a été de changer les codages.. mais je ne peux pas changer les codages sur le serveur-côté puisque les mots de passe dans SQL de la table ne sont pas créés par mon application.
J'ai utiliser côté client, SHA1-encodage à l'aide d'un JavaScript SHA1-classe (plus précisément: un Google Web Toolkit-classe). Il travaille et qui code pour la chaîne comme prévu, mais apparemment, à l'aide de caractères ASCII?..

source d'informationauteur Igor | 2011-09-30