Mac下生成RSA密钥对要注意的问题

生成RSA密钥一般使用的Openssl,方法如下:

在终端输入命令openssl然后敲回车,进入openssl命令输入模式,如下:

1

然后输入一下三行命令:

1
2
3
genrsa -out rsa_private_key.pem 1024
pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

然后输入exit退出openssl命令输入模式,这样会在当前目录生成三个文件,如下:

2

其中:

  • rsa_private_key.pem为私钥
  • rsa_public_key.pem为公钥
  • pkcs8_rsa_private_key.pem为PKCS#8编码的私钥

公钥没有问题,主要是私钥,私钥有两个,两个有什么区别,到底该用哪一个呢?

主要区别在于:

  • rsa_private_key.pem为PKCS#1编码,只包含RSA的密钥信息,是以”—–BEGIN RSA PRIVATE KEY—–”开头,以”—–END RSA PRIVATE KEY—–”结尾,如下图:

3

  • pkcs8_rsa_private_key.pem为PKCS#8编码,除了包含RSA密钥信息外,还包含一些附加信息,例如version和算法等,是以”—–BEGIN PRIVATE KEY—–”开头,以”—–END PRIVATE KEY—–”结尾的,如下图:

4

Mac默认生成的是PKCS#1编码的私钥,而有的系统生成私钥是PKCS#8编码,具体用哪个这要看你的加密代码里是否对附加信息进行了校验判断,如果进行了校验,则应该使用PKCS#8编码的私钥,否则应该使用PKCS#1编码的私钥。

我使用的是这个第三方库进行加密解密的,里面对附加信息进行了校验,所以应该使用PKCS#8编码的密钥。

参考资料

Objective-C-RSA
Objective-C-RSA Issuse #15
openssl生成RSA格式,并转为pkcs8格式