У меня есть таблица SQL с именами пользователей и паролями.Пароли кодируются с использованием метода digest () MessageDigest.Если я кодирую пароль - скажем, «abcdef12» - с помощью метода MessageDigest digest (), а затем преобразую его в шестнадцатеричные значения, строка отличается от того, что я делаю, используя PHP-метод SHA1.Однако я ожидаю, что эти значения будут точно такими же.
Код, который используется для кодирования паролей:
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 () - функция: d253e3bd69ce1e7ce6074345fd5faa1a3c2e89
Вот пароль, закодированный MessageDigest: d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef
Я что-то забыл?
Игорь.
Редактировать: Я нашел кого-то с похожей проблемой: C # SHA-1 против PHP SHA-1 ... Различные результаты? .Решением было изменить кодировки ... но я не могу изменить кодировки на стороне сервера, поскольку пароли в этой SQL-таблице не создаются моим приложением.Я использую SHA1-кодирование на стороне клиента с использованием SHA1-класса JavaScript (точнее: Google Web Toolkit-class).Он работает и кодирует строку, как и ожидалось, но, видимо, с использованием символов ASCII? ..