Как выполнить SHA-256 для двоичных значений с помощью Hashlib?

Я использую Python 2 и пытаюсь выполнить sha256 для двоичных значений с помощью hashlib.

Я немного застрял, так как я совершенно новичок во всем этом, но собрался вместе:

hashlib.sha256('0110100001100101011011000110110001101111’.decode('hex')).hexdigest()

Я полагаю, что он интерпретирует строку как шестнадцатеричный на основе замены шестнадцатеричного значения ('68656c6c6f') на приведенное выше и возвращает

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

И по сравнению с этим ответом, в котором "привет" или используется «68656c6c6f».

Я думаю, что ответ заключается в компоненте декодирования, но я не могу найти пример для двоичного кода, только «hex» или «utf-8».

Кто-нибудь может подсказать, что нужно изменить, чтобы функция интерпретировала как двоичные значения, а не шестнадцатеричные?


person SAMOSAMO    schedule 22.11.2017    source источник


Ответы (1)


Вот код, который выполняет каждое из преобразований данных, которые вы ищете. Все эти шаги можно комбинировать, но здесь они разделены, чтобы вы могли видеть каждое значение.

import hashlib
import binascii

binstr = '0110100001100101011011000110110001101111'
hexstr = "{0:0>4X}".format(int(binstr,2)) # '68656C6C6F'
data = binascii.a2b_hex(hexstr) # 'hello'
output = hashlib.sha256(data).hexdigest()
print output

ВЫХОД:

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

person gammazero    schedule 22.11.2017