SHA256 дает неожиданный результат - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь использовать hashlib, чтобы иметь sh байтовый массив, но я не могу получить ха sh, чтобы соответствовать тому, что я ожидаю (подтверждая ответ с помощью онлайн-функций SHA256).

Вот как я делаю ха sh:

hashedData = hashlib.sha256(input[0:32]).hexdigest()
print('hash = ', hashedData)

Прежде чем я сделаю ха sh, я распечатываю шестнадцатеричный дайджест для входных данных:

print('input = ', input[0:32].hex())

Here's an example output.

При сравнении с несколькими онлайн-функциями sha256 вывод не совпадает. Для этого примера правильное значение ha sh должно быть: enter image description here

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Данные, которые хэшируются в вашем коде, представляются в виде байтовой строки, но данные, которые вы sh используете в любом онлайн-инструменте, который вы используете, это ваш .hex() результат, который представляет собой шестнадцатеричные значения ASCII. Они не одно и то же. Ниже приведено сравнение, которое воспроизводит оба ваших результата:

from binascii import unhexlify
import hashlib

data1 = b'ff815ef617d058df5d16f96a73591e4d12ac358cc113a8c74d8f4ac5843dd921'
data2 = unhexlify(data1)
print(f'{data1=}\n{data2=}')
hashed1 = hashlib.sha256(data1).hexdigest()
hashed2 = hashlib.sha256(data2).hexdigest()
print(f'{hashed1=}\n{hashed2=}')

Вывод:

data1=b'ff815ef617d058df5d16f96a73591e4d12ac358cc113a8c74d8f4ac5843dd921'
data2=b'\xff\x81^\xf6\x17\xd0X\xdf]\x16\xf9jsY\x1eM\x12\xac5\x8c\xc1\x13\xa8\xc7M\x8fJ\xc5\x84=\xd9!'
hashed1='e417268832671b04efa73ba4093572975e084b8b33bfdcb4f9345093f80106ff'
hashed2='56e8d96c55150870ecc84c9a355de617993e21e29c9edcf3caa369b252fd2108'
0 голосов
/ 17 января 2020

Вам нужно дать кодированный ввод sha256. Ввод должен быть передан как строка байтов. Используйте метод encode(), чтобы преобразовать его в формат строки байтов.


hashed = hashlib.sha256("test".encode()).hexdigest()
print(hashed)

В вашем случае используйте метод bytes () для кодирования вашего байтового массива:


hash_input=bytes(input)

Результат: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0f8158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158228

Фактическое разрешение от : 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

...