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

Joh*_*era 4 openssl java-ee pkcs#1 key-generator

对不起我的英语,说实话,我对此有一点了解所以请耐心等待.

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

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

私钥:

openssl genrsa -out name_of_private_key.pem 1024
Run Code Online (Sandbox Code Playgroud)

公钥

openssl rsa -in name_of_private_key.pem -pub out > name_of_public_key.pem
Run Code Online (Sandbox Code Playgroud)

我也经历了这个线程,我发现了一个开源JAVA库BouncyCastle:用Java生成PKCS#1格式的RSA密钥

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

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

Jom*_*oma 9

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

-----BEGIN RSA PRIVATE KEY----- 
...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

您可以将私钥转换为PKCS#8格式,如下所示

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

SSL始终以X.509格式导出公钥,如下所示

-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

我使用这个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
Run Code Online (Sandbox Code Playgroud)

  • **这个答案仍然是错误的**。它有很多赞成票,但生成的“PUBLIC KEY”是一个 X.509“SubjectPublicKeyInfo”,它可能**包含** PKCS#1 格式的“RSA PUBLIC KEY”,但它根本不一样。这只是密钥对生成,然后是通常的导出,**没什么**。 (2认同)

Nai*_*shy 6

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

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

-----BEGIN RSA PUBLIC KEY----- 
...
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

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

-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

  • 实际上,命令行“ rsa”从2010年的1.0.0开始就支持带有选项-RSAPublicKey_ {in,out}的这种格式,但是直到2014年的1.0.1f才被记录下来,直到1.1.0为止才在msg中使用。 2016:{在0.9.8中,您可以_asn1parse和-strparse一起使用来定位和提取SPKI的PKCS1部分作为DER,然后使用enc -base64和少量文本编辑将DER转换为PEM。OTOH OP首选Java,https://stackoverflow.com/questions/14052485/converting-a-public-key-in-subjectpublickeyinfo-format-to-rsapublickey-format-java在2012年12月回答了这一问题。 (2认同)