You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

RSA密钥生成疑问:从私钥生成的公钥每次都不同是否正常?

RSA密钥生成疑问:从私钥生成的公钥每次都不同是否正常?

嘿,我来帮你捋清楚这个问题!首先明确说:正常情况下,从同一个RSA私钥导出的公钥绝对应该是一模一样的。因为RSA公钥的核心就是模数n和公钥指数e,这俩参数是从私钥里直接提取出来的,只要私钥不变,公钥就不可能变。

那为啥你会遇到每次生成的公钥都不同的情况?大概率是代码里的逻辑出了问题,给你几个排查方向:

  • 是不是你每次都重新生成了新的RSA密钥对?比如你代码里每次运行都走一遍RSA_generate_key_ex的完整流程,那每次生成的私钥本身就不一样,对应的公钥自然也不同。如果是要从同一个私钥导出公钥,得确保你是复用已有的私钥对象,而不是每次都重新生成。
  • 检查公钥导出的方式有没有问题。比如你是不是错误地调用了生成密钥的函数来创建公钥,而不是从已有的私钥里提取参数?正确的做法应该是从已有的RSA结构体里取出ne(用RSA_get0_key这类函数),再用来生成公钥;或者直接用PEM_write_bio_RSA_PUBKEY这类函数,从私钥对应的RSA对象里直接导出公钥。
  • 有没有可能是BIO的处理导致的?比如每次写入公钥时,BIO的初始化或者编码方式有差异?不过这种情况很少见,只要参数没变,PEM格式的公钥内容应该是一致的,顶多是换行位置可能有细微差别,但核心的base64编码部分肯定是一样的。

看你贴的代码片段,目前只写到了RSA_g(应该是RSA_generate_key_ex的开头?),你可以检查一下后续的逻辑:是不是每次运行都完整生成了新的密钥对,而不是加载已有的私钥再导出公钥?如果是前者,那公钥不同是正常的;如果是后者,那肯定是代码哪里写错了。

备注:内容来源于stack exchange,提问作者Tom's

火山引擎 最新活动