c - RSA 十六进制 key 转换为 PEM 格式

标签 c openssl key rsa

我有关于 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/

相关文章:

c - Xilinx ARM 编译器不会提示 void 指针算术,并且会生成正确的结果。为什么?

c - 不确定C编程的三个简单函数

swift - iOS 中的 CommonCrypto 与 openssl 命令行产生不同的结果

r - 如何将连续的颜色图例添加到用 map 制作的 R map

javascript - JSON 键名中哪些字符有效/无效?

c - 关于C整数转字符串函数的一些问题

c - 为什么它会改变变量的值?

openssl - TLS 1.2 支持何时添加到 OpenSSL?

c++ - 如何从 OpenSSL 中获取随机盐作为 std::string

c - 使用文件中的 OpenSSL 设置私钥和公钥 EC key