我正在尝试手动验证我的旧 Electrum 比特币钱包是否包含按预期从其种子派生的密钥。密钥派生的一个步骤要求我通过 Sha256 对种子进行哈希处理,然后通过 Sha256 再次对结果进行哈希处理,然后通过 Sha256 对结果进行哈希处理,依此类推,直到迭代 100000 次。理想情况下,我想在 bash shell 中执行此操作,因为这实际上是我在某种程度上有能力的唯一环境,但如果这是不可能的,或者如果有更好的方法在其他上下文中执行此操作,我愿意尝试学习/尝试。
我已经找这个问题的答案几个小时了……似乎所有的谷歌结果都是关于迭代哈希在安全性方面是否有任何价值……但我没有找到任何例子来说明如何真正做到这一点。任何帮助将非常感激。
我需要哈希的种子基本上是,例如:AABBCCDDEEFF1122
我需要对原始二进制数据(不是 ascii 十六进制字符串本身)进行哈希处理,所以我的输入基本上是:“echo 'AABBCCDDEEFF1122' | xxd -r -p”,然后我需要将该命令的输出通过管道传输到其他内容将通过 SHA256 对其进行哈希处理,然后获取结果(原始数据,而不是 ascii 十六进制字符)并通过 SHA256 对其进行哈希处理,然后通过 SHA256 对该结果进行哈希处理,依此类推,直到有 100000 次迭代。最终的 SHA256 哈希结果应该是我需要完成/仔细检查密钥派生的主私钥。
到目前为止,我所做的唯一基本尝试是一个原始解决方案,基本上包含以下内容:我创建了一个名为“hash10times”的可执行文件,其中包含“sha256sum | xxd -r -p”x10。然后我创建了另一个名为“hash100times”的可执行文件,其中包含“hash10times | xxd -r -p”10x..等等。它一直有效,直到我哈希 10000 次...然后一堆叉子错误开始堆积...所以你可以看到,在有人受伤之前我非常需要帮助。
我需要对原始二进制数据(不是 ascii 十六进制字符串本身)进行哈希处理,所以我的输入基本上是:“echo 'AABBCCDDEEFF1122' | xxd -r -p”,然后我需要将该命令的输出通过管道传输到其他内容将通过 SHA256 对其进行哈希处理,然后获取结果(原始数据,而不是 ascii 十六进制字符)并通过 SHA256 对其进行哈希处理,然后通过 SHA256 对该结果进行哈希处理,依此类推,直到有 100000 次迭代。最终的 SHA256 哈希结果应该是我需要完成/仔细检查密钥派生的主私钥。
它看起来像一个简单的循环:
tmp=AABBCCDDEEFF1122
for ((i=0;i<10;++i)); do tmp=$(echo "$tmp" | xxd -r -p | sha256sum | awk '{print $1}'); done
echo "$tmp"