Будет ли вывод криптографической хеш-функции MD5 одинаковым во всех языках программирования?
Я в основном создаю API в php, и один из параметров, который он примет, является зашифрованным значением md5. У меня мало знаний о разных языках программирования, а также о MD5. Поэтому мой основной вопрос: если я принимаю зашифрованные значения md5, значение останется таким же, генерируемым с любого языка программирования, такого как .NET, Java, Perl, Ruby... и т.д.
Или будут некоторые ограничения или проверки для него.
Ответы
Ответ 1
Да, правильная реализация md5 даст тот же результат, иначе md5 не будет полезен в качестве контрольной суммы. Разница может возникнуть при кодировании и порядок байтов. Вы должны быть уверены, что текст закодирован до точно той же последовательности байтов.
Ответ 2
Он будет, но там , но.
Это связано с тем, что он надежно производит один и тот же результат, учитывая повторяющуюся последовательность байтов - точка заключается в том, что мы можем затем сравнить результаты, чтобы проверить, что байты не изменились или, возможно, только цифровой знак результата MD5 а не подписывать весь источник.
, но заключается в том, что общий источник ошибок делает предположения о том, как кодируются строки. MD5 работает с байтами, а не с символами, поэтому, если мы хэшируем строку, мы действительно хешируем конкретную кодировку этой строки. Некоторые языки (и, тем более, некоторые временные ряды) поддерживают специальные кодировки, а некоторые программисты используются для предположения об этой кодировке. Хуже того, некоторые спецификации могут делать предположения о кодировках. Это может быть причиной ошибок, когда две разные реализации будут производить разные хэши MD5 для одной и той же строки. Это особенно важно в тех случаях, когда символы находятся за пределами диапазона U + 0020 до U + 007F (и поскольку U + 007F является элементом управления, то есть имеет свои собственные проблемы).
Все это относится к другим криптографическим хэшам, таким как семейство хэшей SHA.
Ответ 3
Да. MD5 не является функцией шифрования, это хэш-функция, которая использует определенный алгоритм.
Ответ 4
Да, хеши md5 всегда будут одинаковыми независимо от их происхождения - до тех пор, пока базовый алгоритм будет правильно реализован.
Ответ 5
Жизненно важной точкой защищенных хеш-функций, таких как MD5, является то, что они всегда дают одно и то же значение для одного и того же ввода.
Однако он требует, чтобы вы кодировали входные данные в последовательность байтов (или бит) одинаково. Для экземпляров существует множество способов кодирования строки.