iOS RSA非对称加密测试流程

非对称加密需要两把钥匙:公钥和秘钥。

单向加密:一般情况下服务器会持有秘钥和公钥,那该怎么使用呢?以注册场景为例,最初服务器持有公钥和密钥。

用户注册时不是直接发送用户名,密码,验证码等明文信息给服务器请求注册。而是先发送一个注册请求,服务器会把公钥返回给客户端,服务器返回的公钥一般是一个base64编码的字符串。客户端会把密码信息用这个公钥加密,得到一个密文,之后再将“用户名”+“密码的密文”+“验证码”之类的信息发送给服务器,服务器收到请求,将得到的密码密文解密,得到铭文密文+用户名+验证码,验证以后返回给客户端是否注册成功。

下面先说一下如何生成公钥和密钥。

MAC自带了openssl工具,我们可以很容易生成公钥密钥:生成步骤

1、打开终端,输入
openssl

2、生成一个长度为 1024字节的密钥
$  genrsa -out private_key.pem 1024
解释:genrsa : generate RAS 的缩写,指定生成秘钥的方法为RSA
-out 后面是输出的密钥文件名
1024表示生成秘钥的长度 1024 bityes
3、根据秘钥请求一个整数,可以拿着这个整数去证书颁发机构(CA)申请一个数字证书,CA会给你一个新的cacert.pem,那才是你的数字证书。
req -new -key private_key.pem -out rsaCertReq.csr

4、生成整数并签名,有效期10年
$ x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt
解释:
509是一种通用的证书格式
将用上面生成的秘钥 private_key.pem 和 rsaCert.crt 证书请求文件生成一个数字证书 rsacert.crt。这个就是公钥

5、格式转换,将PEM格式文件转成 DER格式:(供ios端测试用)
$ x509 -outform der -in rsaCert.crt -out public_key.der
解释:
在ios开发当中,公钥是不能使用 base64编码的,上面的命令是把公钥的base64编码字符串装换为二进制数据

6、ios开发当中,私钥不能直接使用,需要导出一个p12文件(private_key.p12):(供ios端测试用)
$ pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt

7、用私钥 生成 可供后台使用的公钥rsa_public_key.pem
$ rsa -in private_key.pem -out rsa_public_key.pem -pubout

8、生成可供后台使用的私钥 pkcs8_private_key.pem
$ pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt
9、生成可供 java 后端使用的私钥 pkcs8_private_key.pem
$ openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform DER -nocrypt -out pkcs8_private_key.der



现在,公钥密钥都有了。

参考:

https://blog.csdn.net/Boyqicheng/article/details/51858429

写了一个Demo,可以测试RSA加密字符串的流程。加密过程是有点慢的。

https://github.com/wjwdive/RSAEncrypt.git

原文地址:https://www.cnblogs.com/wjw-blog/p/9108777.html