我有关于 n,p,q 的信息,其中 n=pq 并且 p 和 q 是用于 RSA 算法的大素数。 例如:
n:C053094BFABF26D431CF33E028770DBB15F4AE76820B5150181F1BF42C5CF3AA7BDB459ACA77D610497F94FFA017BC07EF030E3D3450CAE7E706F352B7D7575CA6B8 9A5B3C953028E562F7F698C97FDD490EDF4788F073362C743B70AF2C61A17FA495E5801CC8EA1A732C9E8985DB4E8A22EAB97407806F8D7CDDF0BF3CD9F3电子:10001
p:D9CC00CD811FB052A0EF27332597DA89AAA6B042A1A01A8944229EE680C964148BB07AFBD2EBE467CC9B28E41B5897132F9AFDCD7C5B794CD37E3245A0BC18F5
q:E20F35A3B49B49A35DE25E285EE9B2DC5F3B5FDDD281892F4BE3C54768CBE09272667FF137C5ED9CADD42FF18A8B08FFA9A82C0CF26169B0940F60BEF2AD7647
我想根据该值生成 PEM 私钥和公钥。
我猜它们是十六进制格式,但我真的不知道 pem 格式的 key 中包含哪些内容。我知道 PEM 只是意味着 key 是 base64 以及一些其他添加页脚(开始公开等)。
有什么建议或示例代码吗?
我的意思是,我的目标是从该值获取 PEM 私钥和公钥中的两个文件,然后传递给 openssl。
非常感谢, 安德里亚
最佳答案
PEM 编码的 RSA key 基本上是采用 PKCS#1 (RFC 3447) 描述的格式的二进制 key ,采用 Base-64 编码并由 ASCII 页眉和页脚包围。
请注意,PKCS#1 格式要求私钥不仅包含 d、e、p 和 q,还包含用于中国剩余定理的其他值 (d mod (p-1)、d mod (q-1) ) 和 (q) mod p) 的倒数。如果您知道 p 和 q,这些很容易计算。
如果 key 已加密,则还有更多内容,因为您还应该有一些描述加密的 PEM header 。
OpenSSL 源代码中有示例代码(尽管它几乎没有注释,而且很难理解)。您最好确实阅读相关的 RFC,并根据 OpenSSL 检查代码以确保正确。
关于c - RSA 十六进制 key 转换为 PEM 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865819/