Преобразуйте Java MD5 `java.security.MessageDigest.getInstance (" MD5 ")` код в Python2.7, используя hashlib или другие методы. - PullRequest
0 голосов
/ 24 февраля 2019

Java-код:

public static String md5(byte[] source) throws NoSuchAlgorithmException {
    char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
    md.update(source);
    byte tmp[] = md.digest();
    char str[] = new char[32];
    int k = 0;
    for (int i = 0; i < 16; i++) {
      str[k++] = hexDigits[tmp[i] >>> 4 & 0xf];
      str[k++] = hexDigits[tmp[i] & 0xf];
    }

    return new String(str);
  }

И этот код, введите:

77,48,48,47,48,48,47,48,48,47,114,66,65,72,104,108,120,121,80,107,113,65,89,90,78,106,65,65,67,102,97,85,116,51,77,89,52,55,53,46,106,112,101,103,49,49

return:

2fa040f96503fdabf5fd171da1473069

Затем в python2.7 мой код:

def md5(string):
    m = hashlib.md5()
    m.update(string)
    return m.hexdigest()

один и тот же ввод и возврат:

e480188fdf66deeec3d5a2c42094dd73

Так, как отредактировать мой код Python для получения того же самого возврата?

1 Ответ

0 голосов
/ 24 февраля 2019

При более внимательном рассмотрении вашей входной строки 774848474848474848471146665721... она выглядит как объединенная последовательность байтовых значений, представляющих символы ASCII:

77 48 48 47 48 48 47 48 48 47 114 66 65 72 ...

Преобразовав их в символы, мы получаем строку M00/00/00/rBAHhlxyPkqAYZNjAACfaUt3MY475.jpeg11.

Вычисляя хеш MD5 M00/00/00/rBAHhlxyPkqAYZNjAACfaUt3MY475.jpeg11, я получаю 2fa040f96503fdabf5fd171da1473069.Это хеш, возвращаемый вашим Java-кодом.

С другой стороны, вычисление MD5-хеша строки 774848474848474848471146665721... возвращает e480188fdf66deeec3d5a2c42094dd73.Это хэш, возвращаемый вашим кодом Python.

Мне удалось вычислить оба этих хэша, используя ваш код Java и ваш код Python, и получить одинаковые результаты в обоих случаях.Чтобы преобразовать строку в массив byte в Java, я вызвал .getBytes("UTF-8") в строке.(Я использовал Python 3, а не Python 2, и поэтому мне пришлось вставить вызов .encode("utf-8"), но это в стороне.)

Поэтому ваши примеры кода Java и Python для вычисления хешей MD5 возвращают разные результатыпотому что вы передаете им разные входные данные.

...