SHA1-алгоритм MessageDigest в Java возвращает другой результат, чем SHA1-функция в php

У меня есть SQL-таблица с именами пользователей и паролями. Пароли закодированы с помощью метода MessageDigest digest(). Если я закодирую пароль - допустим, "abcdef12" - методом MessageDigest digest(), а затем преобразую его в шестнадцатеричные значения, то строка будет отличаться от той, что я сделаю, используя SHA1-метод PHP. Хотя я ожидал, что эти значения будут абсолютно одинаковыми.

Код, который используется для кодирования паролей:

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

Преобразование строки в шестнадцатеричное значение выполняется с помощью этого метода:

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();
}

Пароль: abcdef12

Вот пароль, который возвращается многими SHA1-хэш-генераторами и PHP SHA1()-функцией: d253e3bd69ce1e7ce6074345fd5faa1a3c2e89ef

Вот пароль в кодировке MessageDigest: d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef

Am I forgetting something?

Igor.

Edit: I've found someone with a similar problem: C# SHA-1 vs. PHP SHA-1...Different Results? . Решением было изменение кодировки... но я не могу изменить кодировку на стороне сервера, поскольку пароли в этой SQL-таблице не создаются моим приложением. Я использую SHA1-кодирование на стороне клиента, используя JavaScript SHA1-класс (точнее: класс Google Web Toolkit). Он работает и кодирует строку, как и ожидалось, но, по-видимому, с использованием символов ASCII...

11
задан Community 23 May 2017 в 11:47
поделиться