如何以PEM格式生成PKCS#1 RSA密钥?

时间:2012-05-28 10:49:04

标签: java-ee openssl key-generator pkcs#1

对不起我的英语,老实说我对此很了解所以请耐心等待。

我正在开发一个将签名请求发送到服务器的java应用程序。 为此,我必须生成PEM格式的 PKCS#1 RSA 密钥对,以进行签名和验证。我尝试过使用 OpenSSL v.1.0.1 。但生成的公钥是X.509 PEM

这是我用来生成密钥的openssl命令:

私钥

openssl genrsa -out name_of_private_key.pem 1024

公钥

openssl rsa -in name_of_private_key.pem -pub out > name_of_public_key.pem

我也经历过这个帖子,我找到了一个开源JAVA库BouncyCastle:Generating RSA keys in PKCS#1 format in Java

但是它说BouncyCastle仅用于PKCS#1 填充而不是编码

最好是,如果没有其他选择,我正在寻找使用JAVA或任何第三方生成它的方法。

3 个答案:

答案 0 :(得分:6)

虽然OpenSSL库支持PKCS#1编码,但OpenSSL的命令行版本只会输出x.509格式的RSA公钥。不幸的是,除了编写一些使用OpenSSL库输出PKCS#1格式密钥的代码之外别无选择。

作为参考,PKCS#1密钥使用这些页眉/页脚:

-----BEGIN RSA PUBLIC KEY----- 
...
-----END RSA PUBLIC KEY-----

x.509密钥使用这些页眉/页脚:

-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----

答案 1 :(得分:6)

OPENSSL默认以 PKCS#1 格式生成私钥 它如下

-----BEGIN RSA PRIVATE KEY----- 
...
-----END RSA PRIVATE KEY-----

您可以将私钥转换为 PKCS#8 格式 这是如下

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

SSL始终以 X.509 格式导出公钥 它如下

-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----

我使用这个bat脚本生成RSA密钥对。

@ECHO OFF
SET mypath=%~dp0
cd %mypath:~0,-1%

ECHO === GENERATE PRIVATE KEY --- Format: PKCS#1 --- File: private.txt===
openssl genrsa -f4 -out private.txt 4096 

ECHO === GENERATE PRIVATE KEY --- Format: PKCS#8 --- File: private8.txt===
openssl pkcs8 -topk8 -inform pem -in private.txt -outform PEM -nocrypt -out private8.txt

ECHO === GENERATE PUBLIC KEY --- Format: X.509 --- File: public.txt===
openssl rsa -in private.txt -outform PEM -pubout -out public.txt
PAUSE

答案 2 :(得分:0)

您可以强制 OpenSSH 以旧的 PEM/PKCS#1 格式生成密钥:
ssh-keygen -t rsa -b 4096 -o -a 100 -f id_rsa -m PEM < /dev/null