Intereting Posts
Чтение значения сеанса с помощью Javascript Метод обновления Laravel Controller не работает APC (альтернативный кэш PHP), бросающий множество PHP-уведомлений Как запретить пользователю регистрироваться только один раз за сеанс? Исключить исключение «PDOException» с сообщением «SQLSTATE : столбец не найден PHP Использование запросов cURL и GET в URL-адресе упорядоченный массив объектов в соответствии с 3-месячным порядком в php Преобразование времени GMT в локальное время с использованием смещения часового пояса в php Есть ли максимум для вывода PDO :: debugDumpParams? перенаправить загрузку php-заголовка получение имени файла без расширения файла в моем php-коде конвертировать XML-данные в mysql-запрос на вставку / обновление, используя php Могу ли я установить Laravel без использования Composer? Как проверить флажок в PHP Как ограничить доступ к веб-приложению только на одну машину?

Разница между Java и php5 MD5 Hash

Я сталкиваюсь с какой-то странной проблемой, которая связана с MD5-хэшами в Java и php5. Я понял, что при определенных обстоятельствах следующий код не генерирует правильные хеши MD5:

public static String getMD5Hash(String string) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(string.getBytes()); byte[] digest = md5.digest(); string = byteArrToHexString(digest); } catch (NoSuchAlgorithmException e1) { e1.printStackTrace(); } return string; } private static String byteArrToHexString(byte[] bArr) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < bArr.length; i++) { int unsigned = bArr[i] & 0xff; sb.append(Integer.toHexString((unsigned))); } return sb.toString(); } 

Мне пришлось перенести существующую пользовательскую базу данных, где хранятся пароли, хранящиеся в php5 MD5. Теперь некоторые из пользователей, не все, не могут войти в систему, потому что мой код Java не создает правильный хэш MD5.

Любые идеи, что не так с этим?

Related of "Разница между Java и php5 MD5 Hash"

byteArrToHexString не преобразовывает байты <0x10 правильно, вам нужно byteArrToHexString их нулями.

Пример:

 int unsigned = bArr[i] & 0xff; if (unsigned < 0x10) sb.append("0"); sb.append(Integer.toHexString((unsigned))); 

Настолько забавно … Я только что столкнулся с проблемой с MD5 хэшированием паролей. В моем случае проблема заключалась в кодировании исходного пароля в byte[] .

Я советую вам выяснить, какая именно кодировка использовалась для хэширования ранее сохраненных паролей и изменить строку 6 вышеприведенного кода на

 md5.update(string.getBytes("UTF-8")); 

(Конечно, это всего лишь пример … узнать правильную кодировку для использования в качестве параметра)

Кстати, я полагаю, у вас есть свои причины, но почему бы не использовать метод хеширования?

 return new String(digest, "UTF-8"); 

Yuval = 😎

Вам не хватает:

 md5.reset(); 

перед выполнением обновления ()

Проверьте пример Java md5 с MessageDigest