Хеш-функции, совместимые с python

В Solidity я запускаю следующий код:

function hashTest() public returns(bytes32,bytes32,bytes32) {
bytes32 _solution = 0xbc756c25d68ea2f260ea5f15e1e1c734c019cbc014270dd386eacca4699f60f6;
bytes32 v = keccak256(abi.encodePacked(_solution));
bytes32 x = sha256(abi.encodePacked(_solution));
bytes32 z = ripemd160(abi.encodePacked(_solution));
Print(v,x,z);
return(v,x,z);

Я хочу повторить на питоне, но пока могу получить только первый (тот, который поддерживается Web3), кто-нибудь знает, как получить остальные? Вот моя текущая попытка:

def testHash():
    _solutions = '0xbc756c25d68ea2f260ea5f15e1e1c734c019cbc014270dd386eacca4699f60f6';
    v = Web3.toHex(Web3.sha3(hexstr=_solutions))
    x = "0x" + hashlib.new('sha256',str.encode(_solutions)).hexdigest()
    z= hashlib.new('ripemd160',str.encode(_solutions)).hexdigest()
    print("v",v)
    print("x",x);
    print("z",z);

Итак, как я уже сказал, лучшие совпадают, а два других нет.

Ответы (1)

Проблема здесь в том, что вы обрабатываете шестнадцатеричную строку как строку. Вы должны преобразовать строку в байты, используя bytes.fromhex(). Обратите внимание, что вы должны удалить 0xиз строки. Так:

_solutions = '0xbc756c25d68ea2f260ea5f15e1e1c734c019cbc014270dd386eacca4699f60f6';
v = Web3.toHex(Web3.sha3(hexstr=_solutions))
x = "0x" + hashlib.new('sha256',bytes.fromhex(_solutions[2:])).hexdigest()
z= hashlib.new('ripemd160',bytes.fromhex(_solutions[2:])).hexdigest()

Надеюсь это поможет.

Ты доблестный сияющий рыцарь. Спасибо за помощь, это отлично работает