Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?
RT
在 1.20 之前的版本,用同样的seed
只会生成一种密钥对,1.20 开始就出现这个现象了。
完整代码在下面,因为 go.dev 有缓存,做了两个缓存结果,两个的代码是一样的,只有第 45 行的打印文字不同。
这段是和预期一样的 https://go.dev/play/p/-xTC8xOiFtp
Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?
更多关于Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
感谢
在Go语言的crypto/ecdsa
包中,ecdsa.GenerateKey
函数用于生成一个ECDSA(椭圆曲线数字签名算法)密钥对。关于你提到的使用相同的seed是否会生成两种密钥对的问题,答案是否定的。
在正常情况下,如果使用相同的seed来调用ecdsa.GenerateKey
函数,应该会生成完全相同的密钥对。这是因为随机数生成器(PRNG,伪随机数生成器)在给定相同的seed时,会产生相同的随机数序列。ECDSA密钥对的生成依赖于这些随机数,因此,相同的seed会导致生成相同的私钥和相应的公钥。
如果你在使用相同的seed时观察到不同的密钥对,这通常意味着:
- 代码中可能存在某种错误,比如seed值在传递给
GenerateKey
之前被意外修改。 - 可能使用了不同的随机数生成器配置或环境,这影响了PRNG的行为(尽管这种情况非常罕见)。
- 有可能是对密钥对生成过程的误解或误判,比如比较密钥对的方式不正确。
因此,如果你遇到了这种情况,建议首先检查你的代码,确保seed值在生成密钥对前后保持一致,并且没有其他因素干扰随机数生成过程。如果问题仍然存在,可以考虑在Go社区或相关论坛中寻求更具体的帮助。