为 ed25519 密钥生成公钥匹配 BEP
问题:
使用 Go crypto/ed25519 包,生成的公钥与测试用例中提供的预期公钥不同使用 BEP 数据。
原因:
ed25519 存在不同的私钥格式。 BEP 数据使用 64 字节哈希私钥,而 Go 包使用 32 字节哈希私钥(以 32 字节种子为前缀)。
解决方案:
虽然不可能将 BEP 私钥转换为 Go 格式,但可以创建 Go 库的修改版本来处理在BEP.
代码修改:
修改后的代码包括以下函数:
<code class="go">func getPublicKey(privateKey []byte) []byte { // ... (extraction of 32-byte hash from 64-byte hashed private key and publicKey generation) ... } func sign(privateKey, publicKey, message []byte) []byte { // ... (extraction of 32-byte hash from 64-byte hashed private key and signature computation) ... }</code>
用法:
使用此修改后的代码,可以运行测试用例,演示生成的公钥和签名与预期的 BEP 数据匹配:
<code class="go">// Using the modified code... fmt.Printf("Calculated key: %x\n", publicKey) fmt.Printf("Expected key: %s\n", expectedPublicKey) keyMatches := expectedPublicKey == hex.EncodeToString(publicKey) fmt.Printf("Public key matches expected: %v\n", keyMatches) // Similarly, check for signature match</code>
以上是为什么我的 Go ed25519 公钥与预期的 BEP 数据不同?的详细内容。更多信息请关注PHP中文网其他相关文章!