Как установить MessageDigest seed?

Класс MessageDigest реализует алгоритм SHA-1 (среди многих других). Алгоритм SHA-1 позволяет использовать разные "семена" или начальные дайджесты. См. SHA-1 Psuedocode

Алгоритм инициализирует переменные или начальное число:

Initialize variables:
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0

Однако класс MessageDigest, как описано в интерактивном руководстве по Java, не предоставляет API для установки этих начальных переменных. Фактически, это не заявляет значение начальных переменных.

Как я могу установить начальное начальное значение для алгоритма SHA-1?

Где пример SHA-1 в Java, ИСПОЛЬЗУЯ НАЧАЛЬНОЕ СЕМЕНА?
(Я ищу реализацию SHA-1, если в примере не используется MessageDigest с альтернативным начальным семенем.)

3 ответа

Решение

Функция Java не может быть снабжена начальным начальным числом.

Я скопировал реализацию алгоритма SHA-1 на C и изменил ее, чтобы разрешить изменение начальных начальных значений.

Где вы видите потребность в семени в дайджесте SHA-1? Обычно в алгоритме шифрования с потребностью в источнике случайных чисел начальное число "необходимо". Но в SHA-1 вы даже не используете случайные числа вообще, поэтому нет никакого начального или начального вектора для установки. Переменные, которые вы упомянули, являются "жесткими" (константами), они являются частью алгоритма, нет необходимости или использовать для изменения значений h0-4.

Я рекомендую использовать соль вместо начального числа для хеш-функций семейства MessageDigest. Соль применяется, например, путем добавления байтов соли к входным данным.

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

Другие вопросы по тегам