RSA
一、生成RSA密钥
1、打开终端,cd到目标文件夹。【生成的证书文件都在当前路径下,目标文件夹即是保存证书文件的文件夹】
2、命令:openssl,进入openssl环境。【由于Mac自带openssl环境,所以不用安装】
3、命令:genrsa -out rsa_private_key.pem 1024,生成RSA私钥。【1024是指定密钥的长度,rsa_private_key是私钥的名称】
4、命令:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,生成公钥。【pem文件是一个base64编码的二进制文件】
5、命令:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out pkcs8_private_key.pem,将RSA私钥转换成PKCS8格式。【后边一定要加-out pkcs8_private_key.pem,将转换后的私钥保存在pkcs8_private_key.pem,不然得到的结果要设置密码且显示在终端中,这个和得到pem中的私钥有差异。】
6、这样就可以得到RSA密钥,公钥使用第4步生成的公钥,私钥使用第5步转PKCS8格式后保存的私钥。【pem文件可以直接文本编辑器打开】
附:GitHub RSA工具类 Objective-C-RSA
二、生成RSA加密证书
a、证书的概念在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于解密。
1、打开终端,cd到目标文件夹。【生成的证书文件都在当前路径下,目标文件夹即是保存证书文件的文件夹】
2、命令:openssl,进入openssl环境。【由于Mac自带openssl环境,所以不用安装】
3、命令:genrsa -out rsa_private_key.pem 1024,生成RSA私钥。【1024是指定密钥的长度,rsa_private_key是私钥的名称】
4、命令:req -new -key rsa_private_key.pem -out rsaCerReq.csr,生成证书请求文件rsaCertReq.csr。【这一步会提示输入国家、省份、mail等信息,可以根据实际情况填写,部分可不填或随便填写。这里可能会输入一个私钥保护密码】
5、命令:x509 -req -days 3650 -in rsaCerReq.csr -signkey rsa_private_key.pem -out rsaCert.crt,生成证书rsaCert.crt,并设置有效时间。
6、命令:x509 -outform der -in rsaCert.crt -out rsa_public_key.der,生成供iOS使用的公钥文件rsa_public_key.der。
7、命令:pkcs12 -export -out rsa_private_key.p12 -inkey rsa_private_key.pem -in rsaCert.crt,生成供iOS使用的私钥文件rsa_private_key.p12。【这一步会提示给私钥文件设置密码,直接输入想要设置密码即可,然后敲回车,然后再验证刚才设置的密码,再次输入密码,然后敲回车。在解密时,rsa_private_key.p12文件需要和这里设置的密码配合使用,因此需要牢记此密码】
8、命令:rsa -in rsa_private_key.pem -out java_rsa_public_key.pem -pubout,生成供Java使用的公钥java_rsa_public_key.pem。
9、命令:pkcs8 -topk8 -in rsa_private_key.pem -out java_pkcs8_private_key.pem -nocrypt,生成供Java使用的私钥java_pkcs8_private_key.pem。
b、证书的使用。
1、导入密钥文件,把生成的der和p12拖入到项目中,并导入Security.framework框架。
2、OC中在bundle中要是找不到der类型的文件,此时,需要改一下上述生成的 rsa_public_key.der 文件的后缀为 .cer 才可以。
三、RSA的使用
使用rsa工具类进行加密解密和加签验签
1、公钥加密,私钥解密。【注意公钥给的是pem里面的字符串的话,需要使用base64解码后生成公钥;给的是der证书的话直接使用。在rsa工具类中有对应的方法】
2、私钥加签,公钥验签。
3、若要加强安全的话,使用两套密钥,分别进行加密解密和加签验签。