В sha256
га sh рассчитан неверно. Кодировка Utf8 не может быть выполнена. Вместо этого энтропия должна быть представлена в виде байтового массива (см. to_bytes
), и га sh должен быть сгенерирован из этого:
import hashlib
def sha256(_entropy):
entBytes = int(_entropy, 2).to_bytes(len(_entropy) // 8, byteorder='big')
return hashlib.sha256(entBytes).hexdigest()
Кроме того, ха sh должен быть дополнен начальным От 0 до 256 бит (см. zfill
), поэтому в контрольной сумме учитываются также первые 0:
def get_checksum(_entropy):
entropy_length = len(_entropy) // 32
return bin(int(sha256(_entropy), 16))[2:].zfill(256)[:entropy_length];
Пример 1, с здесь, шаг 4:
_entropy = '0011001010000101011111010000101111111111101000001001000001001010110100010101111001001011000100111100011110001001111011110111011010010100110011001110111001100010111011010010101101010011110100100110101111110001100101011001000110100010000110110001100101110001'
print(get_checksum(_entropy)) # 11110011
Пример 2, ваш второй пример:
_entropy = '01011010000000110011001001001001001110100011100101010001001100111001111111000110000000011011110111011000011001010111001101111100'
print(get_checksum(_entropy)) # 1110
Пример 3, ведущие 0-значения, сравните с результатом из здесь :
_entropy = '10111101100011110111100011101111111110100010000101111110100101100000001100111111001100010010010011110110011011010010001011011000'
print(get_checksum(_entropy)) # 0010