You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ED25519私钥转公钥问题:RFC测试向量与Python结果不符排查

ED25519 secret_to_public 操作问题排查

疑问1:RFC中显示的64字节密钥是否符合ED25519的32字节要求

ED25519的私钥标准长度为32字节,RFC 8032第7.1节测试向量里的64字节值是「32字节私钥 + 32字节公钥」的完整密钥对组合,并非单独的私钥。测试向量2的单独私钥是前64位十六进制字符(对应32字节原始二进制),你代码中仅截取了前32位十六进制字符(对应16字节),这本身就不符合私钥长度要求。

疑问2:密钥编码及结果解码是否正确

你的代码存在核心编码错误:

  • 直接将十六进制字符串的ASCII字节(比如b"4ccd08...")传入secret_to_public,但该函数需要的是原始二进制私钥,而非十六进制字符的字节形式。
  • 正确的做法是用bytes.fromhex()将十六进制字符串解码为原始二进制字节。

修正后的代码示例

# RFC 8032 7.1节测试向量2的完整私钥(十六进制)
sk_hex = "4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb"
# 解码为32字节原始二进制私钥
sk_bytes = bytes.fromhex(sk_hex)
# 生成公钥
pk_bytes = secret_to_public(sk_bytes)
# 将公钥转换为十六进制字符串输出
pk_hex = pk_bytes.hex()
print(pk_hex)

执行后会输出预期的公钥:3d4017c3e843895a92b70aa74d1b7ebc7c57786db5a7bff862a50f6b0f6b4c0b

内容的提问来源于stack exchange,提问作者azuldev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:55:20