如何实现SHA256迭代哈希?Electrum钱包种子验证需求
在Bash中实现100000次SHA256迭代哈希(Electrum种子派生验证)
问题根源
你之前用嵌套脚本(如hash10times、hash100times)的方式会导致多层进程嵌套调用,系统进程表快速被占满,最终触发fork错误。直接用单循环替代嵌套调用,就能避免这个问题。
方案一:Bash实现(流式处理,避免二进制变量截断)
这个方案通过管道流式传递数据,避免bash变量无法处理null字节的问题,同时用单循环替代嵌套调用:
# 将十六进制种子转为二进制,然后执行100000次SHA256迭代哈希,最后转十六进制输出 echo 'AABBCCDDEEFF1122' | xxd -r -p | \ (for ((i=0; i<100000; i++)); do openssl dgst -sha256 -binary done) | xxd -p
说明:
xxd -r -p:把十六进制字符串转为原始二进制数据openssl dgst -sha256 -binary:计算SHA256哈希并输出二进制结果- 循环执行100000次,每次将上一次的哈希结果作为下一次的输入
- 最后用
xxd -p把最终二进制哈希转为十六进制,方便后续验证
注意:
Bash方案需要频繁调用openssl进程,10万次迭代可能需要数分钟才能完成,适合对速度要求不高的验证场景。
方案二:Python实现(高效快速,推荐)
如果追求速度,Python方案在单个进程内完成所有哈希计算,无需频繁fork,10万次迭代仅需几秒:
import hashlib # 十六进制种子转为二进制 seed_hex = 'AABBCCDDEEFF1122' seed_bin = bytes.fromhex(seed_hex) current_hash = seed_bin # 执行100000次SHA256迭代哈希 for _ in range(100000): current_hash = hashlib.sha256(current_hash).digest() # 输出十六进制格式的最终哈希 print(current_hash.hex())
说明:
bytes.fromhex():直接将十六进制字符串转为二进制数据hashlib.sha256().digest():计算SHA256哈希并返回二进制结果- 全程在Python进程内循环,无额外进程创建,效率远高于Bash方案
内容的提问来源于stack exchange,提问作者AnarchyMyDear
相关产品推荐
相关产品推荐

