python3 中 使用和solidity 中一样的keccak256算法 并且结果一致

环境 下载的python3.8
1、python依赖
pip install pycryptodome
+改lib下的 crypto为Crypto 解决
详细说明 改lib文件下的crpyto文件 把首字母大写
只需要安装这个依赖。 如果有安装其他包 可以卸载掉以免干扰
pip uninstall 包名 为卸载依赖
此处原文地址 见评论处 https://blog.csdn.net/DanielJackZ/article/details/104531615

2、代码

from Crypto.Hash import keccak
def keccakTest():
    keccak_hash = keccak.new(digest_bits=256)
    # keccak_hash.update(b'0')#044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d
    #keccak_hash.update(b'a') 3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb
    #b'' 这个是字符转byte 的方法 因为hex 0 为不可见字符 所以我们没有办法通过字符转换
    a_bytes = bytes.fromhex('0000000000000000000000000000000000000000000000000000000000000001')# bytes.fromhex('61')等于 b'a'
    print(a_bytes)#打印为 b'a'
    keccak_hash.update(a_bytes)
    print(keccak_hash.hexdigest())

说明下 这个地方调试的原因是 solidity 在计算数组存储数据开始 的位置 会使用这个函数 在solidity中是

bytes32 kec=keccak256(bytes32(0))

所以 当使用python 来进行计算时 需要转换 bytes32(0) 是hex 格式的 (上面那一串) 这样才能保证算出的结果是一致的

在计算字符格式的参数 python使用b’’ 结果是solidity一致的

solidity代码 为 请注意 solidity 版本为^0.4.4 老版本可以穿字符串 新版只能是bytes32

 bytes32 kec=keccak256(a);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值