RSA基本原理
RSA使用"秘匙对"对数据进行加密解密.在加密解密数据前,需要先生成公钥(public key)和私钥(private key).
公钥(public key): 用于加密数据. 用于公开, 一般存放在数据提供方, 例如iOS客户端.
私钥(private key): 用于解密数据. 必须保密, 私钥泄露会造成安全问题.
iOS中的Security.framework提供了对RSA算法的支持.这种方式需要对密匙对进行处理, 根据public key生成证书, 通过private key生成p12格式的密匙.
除了Secruty.framework, 也可以 将openssl库编译到iOS工程中 , 这可以提供更灵活的使用方式.
一:客户端发送流程(公钥加密,私钥解密)
二:客户端接收流程(私钥加密,公钥解密)
1、使用openssl生成密钥对
Github Gist: https://gist.github.com/lvjian700/635368d6f1e421447680(参考链接)
#!/usr/bin/env bash
echo"Generating RSA key pair ..."
echo"1024 RSA key: private_key.pem"
openssl genrsa -out private_key.pem 1024
echo"create certification require file: rsaCertReq.csr"
openssl req -new -key private_key.pem -out rsaCertReq.csr
echo"create certification using x509: rsaCert.crt"
openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt
echo"create public_key.der For IOS"
openssl x509 -outform der -in rsaCert.crt -out public_key.der
echo"create private_key.p12 For IOS. Please remember your password. The password will be used in iOS."
openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt
echo"create rsa_public_key.pem For Java"
openssl rsa -in private_key.pem -out rsa_public_key.pem -pubout
echo"create pkcs8_private_key.pem For Java"
openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt
echo"finished."
提示:
1)在创建证书的时候, terminal会提示输入证书信息. 根据提示输入对应信息就OK.
2)在创建p12密匙时, 会提示输入密码, 此时的密码必须记住, 之后会用到.
3)如果上面指令有问题,请参考最新的openssl官方文档, 以官方的为准.
2、下载RSA-objc文件夹。
RSA-objc的下载链接:https://github.com/jslim89/RSA-objc,从RSA-objc的项目中取出RSA-objc文件夹
3、下载openssl library:
取出include、lib文件夹。下载链接:https://github.com/st3fan/ios-openssl
4、新建一个项目,将文件夹RSA-objc、include、lib拷贝到根目录下,如图:
5、设置环境变量:
设置“Header Search Paths” 的值为/Users/huangzhiming/Desktop/work/OpenSSL/OpenSSL/include (绝对路径)
注意:设置“Header Search Paths” 的值时,$(PROJECT_DIR)/myRES/include(这么写是相对路径)
设置“Valid Architectures” 的值为 armv7/armv7s。如图: