Будет ли вывод криптографической хеш-функции MD5 таким же на всех языках программирования?

Я в основном создаю API на php, и одним из параметров, которые он будет принимать, является зашифрованное значение md5. Я плохо разбираюсь в разных языках программирования, а также в MD5. Итак, мой основной вопрос: если я принимаю зашифрованные значения md5, будет ли значение оставаться таким же, сгенерированным на любом языке программирования, таком как .NET, Java, Perl, Ruby ... и т. Д.

Или будут какие-то ограничения или проверки для этого.

17
задан brian d foy 11 August 2010 в 04:57
поделиться

5 ответов

Да, правильная реализация md5 даст тот же результат, иначе md5 не будет использоваться в качестве контрольной суммы. Разница может быть связана с кодированием и порядком байтов . Вы должны быть уверены, что текст закодирован как в точности в той же последовательности байтов.

25
ответ дан 30 November 2019 в 10:43
поделиться

Будет, но есть , но .

Это произойдет, потому что он должен надежно выдавать тот же результат при повторяющейся серии байтов - суть в том, что мы можем затем сравнить эти результаты, чтобы проверить, не изменились ли байты, или, возможно, только поставить цифровую подпись для результата MD5. вместо подписания всего источника.

но заключается в том, что общий источник ошибок - это предположения о том, как кодируются строки. MD5 работает с байтами, а не с символами, поэтому, если мы хэшируем строку, мы действительно хэшируем определенную кодировку этой строки. Некоторые языки (и, более того, некоторые среды выполнения) предпочитают определенные кодировки, и некоторые программисты привыкли делать предположения об этой кодировке. Что еще хуже, некоторые спецификации могут делать предположения о кодировках. Это может быть причиной ошибок, когда две разные реализации будут создавать разные хэши MD5 для одной и той же строки. Это особенно верно в случаях, когда символы находятся за пределами диапазона от U + 0020 до U + 007F (и поскольку U + 007F является элементом управления, у него есть свои проблемы).

Все это применимо к другим криптографическим хешам, таким как семейство хешей SHA.

14
ответ дан 30 November 2019 в 10:43
поделиться

Да. MD5 - это не функция шифрования, это хэш-функция , которая использует определенный алгоритм.

5
ответ дан 30 November 2019 в 10:43
поделиться

Да, хэши md5 всегда будут одинаковыми, независимо от их происхождения, если основной алгоритм реализован правильно.

3
ответ дан 30 November 2019 в 10:43
поделиться

Важнейшим моментом безопасных хэш-функций, таких как MD5, является то, что они всегда производят одно и то же значение для одного и того же ввода.

Однако он требует, чтобы вы таким же образом кодировали входные данные в последовательность байтов (или битов). Например, есть много способов кодировать строку.

3
ответ дан 30 November 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: