В 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);
Итак, как я уже сказал, лучшие совпадают, а два других нет.
Проблема здесь в том, что вы обрабатываете шестнадцатеричную строку как строку. Вы должны преобразовать строку в байты, используя 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()
Надеюсь это поможет.
фетт