Разница между Java и php5 MD5 Hash - PullRequest
1 голос
/ 29 июня 2009

Я сталкиваюсь со странной проблемой, связанной с 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.

Есть идеи, что не так с вышесказанным?

Ответы [ 3 ]

10 голосов
/ 29 июня 2009

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

Пример:

int unsigned = bArr[i] & 0xff;
if (unsigned < 0x10)
  sb.append("0");
sb.append(Integer.toHexString((unsigned)));
1 голос
/ 29 июня 2009

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

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

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

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

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

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

Юваль = 8 -)

0 голосов
/ 29 июня 2009

Вы пропали без вести:

md5.reset();

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

Проверка Пример Java md5 с MessageDigest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...