Реализация SHA1 отличается от встроенного SHA1 ⇐ Python
Реализация SHA1 отличается от встроенного SHA1
Я пытаюсь переопределить алгоритм SHA1 в Python, но результат моей функции отличается от результата во встроенной хеш-библиотеке, сначала я думал, что проблема в моей функции поворота, но после ее исправления все равно остается ошибка. разница в выводах, вот мой код:
из hashlib импортировать sha1 как встроенный_sha1 def rotl32(значение: int, count: int) -> int: return ((значение > (32 - счетчик))) & 0xffffffff def default_sha1 (данные: байты) -> байты: вернуть встроенный_sha1(данные).дайджест() def sha1(данные: байты) -> байты: # инициализируем переменные ч0 = 0x67452301 h1 = 0xefcdab89 h2 = 0x98badcfe h3 = 0x10325476 h4 = 0xc3d2e1f0 msg_len = len(данные) # добавляем 0x80 данные += б"\x80" # добавляем 0x00 до тех пор, пока msg_len % 64 == 56 данные += b"\x00" * ((56 - msg_len % 64) % 64) # добавляем длину в битах как 64-битное целое число с прямым порядком байтов данные += (msg_len * 8).to_bytes(8, «большой») # получаем новую длину (теперь кратную 64) msg_len = len(данные) для меня в диапазоне (0, msg_len, 64): # для каждого фрагмента размером 64 байта # разбить фрагмент на шестнадцать 32-битных слов с прямым порядком байтов слова = [int.from_bytes(данные[i + j:i + j + 4], «большой») для j в диапазоне (0, 64, 4)] # расширить шестнадцать 32-битных слов до восьмидесяти 32-битных слов для j в диапазоне (16, 80): слова.добавить( rotl32((слова[j - 3] ^ слова[j - 8] ^ слова[j - 14] ^ слова[j - 16]), 1) ) # инициализируем хеш-значение для этого фрагмента а = h0 б = h1 с = h2 d = h3 е = h4 для j в диапазоне (80): если 0
Я пытаюсь переопределить алгоритм SHA1 в Python, но результат моей функции отличается от результата во встроенной хеш-библиотеке, сначала я думал, что проблема в моей функции поворота, но после ее исправления все равно остается ошибка. разница в выводах, вот мой код:
из hashlib импортировать sha1 как встроенный_sha1 def rotl32(значение: int, count: int) -> int: return ((значение > (32 - счетчик))) & 0xffffffff def default_sha1 (данные: байты) -> байты: вернуть встроенный_sha1(данные).дайджест() def sha1(данные: байты) -> байты: # инициализируем переменные ч0 = 0x67452301 h1 = 0xefcdab89 h2 = 0x98badcfe h3 = 0x10325476 h4 = 0xc3d2e1f0 msg_len = len(данные) # добавляем 0x80 данные += б"\x80" # добавляем 0x00 до тех пор, пока msg_len % 64 == 56 данные += b"\x00" * ((56 - msg_len % 64) % 64) # добавляем длину в битах как 64-битное целое число с прямым порядком байтов данные += (msg_len * 8).to_bytes(8, «большой») # получаем новую длину (теперь кратную 64) msg_len = len(данные) для меня в диапазоне (0, msg_len, 64): # для каждого фрагмента размером 64 байта # разбить фрагмент на шестнадцать 32-битных слов с прямым порядком байтов слова = [int.from_bytes(данные[i + j:i + j + 4], «большой») для j в диапазоне (0, 64, 4)] # расширить шестнадцать 32-битных слов до восьмидесяти 32-битных слов для j в диапазоне (16, 80): слова.добавить( rotl32((слова[j - 3] ^ слова[j - 8] ^ слова[j - 14] ^ слова[j - 16]), 1) ) # инициализируем хеш-значение для этого фрагмента а = h0 б = h1 с = h2 d = h3 е = h4 для j в диапазоне (80): если 0
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вызов Git diff перед фиксацией выдает «фатальный: невозможно прочитать [SHA1]»
Anonymous » » в форуме Python - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Получите сертификат отпечатка пальца SHA1 в Android Studio для Google Maps
Anonymous » » в форуме Android - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Запуск keytool для получения сертификата SHA1 только зацикливает меня на списке
Anonymous » » в форуме Android - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-