Должны ли все реализации SHA512 давать один и тот же хэш?

Я работаю над написанием функции SHA512. Когда я проверяю файл, который я шифрую, в разных источниках, инструменте Linux SHA512SUM, паре веб-сайтов и запускаю его через старый исходный код, который у меня есть для SHA512, все они дают разные значения хэша. Моя идея, связанная с этим проектом, заключается в том, что все алгоритмы хеширования будут выводить одно и то же значение хеш-функции, если они реализованы правильно, для использования в качестве контрольной суммы. Я ошибаюсь, думая об этом? Если я ошибаюсь, как мне действительно проверить правильность моей работы?

Заранее спасибо.


person Matt    schedule 16.06.2011    source источник


Ответы (1)


Да, это один из основных строительных блоков PKI: один и тот же блок данных, переданный в хэш, всегда должен возвращать одно и то же значение хеш-функции.

однако остерегайтесь интерпретации: результат хэша SHA-2 (512) представляет собой блок из 512 бит, а не строковое значение, поэтому сначала он будет закодирован для потребления человеком, и поэтому возможно, что вы увидите, как выглядит визуально разные результаты, когда это просто вопрос использования разных кодировок.

person Stephane    schedule 16.06.2011
comment
Для хеширования строки Hi There инструмент Linux дает первые три числа как 526, а веб-сайт hash.online-convert.com/sha512-generator имеет начало с 523. Эта тенденция продолжается, и только два веб-сайта согласны. Исходный код, с которым я работаю, использует двоичную форму для фактического отображения хеша. Как я узнаю, какой инструмент действительно использовать? - person Matt; 16.06.2011
comment
Хеширование работает с битами и байтами, а не с текстом, поэтому вы должны учитывать декодированную версию вашего ввода. Во-первых, попробуйте это с некоторыми из наиболее подходящих тестовых векторов. Как правило, пустая строка является хорошим тестовым вектором, но вы можете найти множество других с помощью простого веб-поиска. - person Stephane; 17.06.2011
comment
Oh, and 'Hi There', when encoded as a straight 8bit ASCII string returns the following hash (hex-encoded): 523df363aa22c25478a478d25e6945f842509df8b77b0c755a40538a9a239ae178b3225f516bdb9e29f6d1cb7de4f2cf74e67fd85f6d9817c48890d686d51838 - person Stephane; 17.06.2011