知識補充:
? ? ? ?RSA算法是一種非對稱加密算法,常被用于加密數據傳輸.
RSA基本原理:
? ? ? ?RSA使用"秘匙對"對數據進行加密解密.在加密解密數據前,需要先生成公鑰(public key)和私鑰(private key).
? ? ? ? 公鑰(public key): 用于加密數據. 用于公開, 一般存放在數據提供方, 例如iOS客戶端.
? ? ? ? ?私鑰(private key): 用于解密數據. 必須保密, 私鑰泄露會造成安全問題.
? ? ? ? ?iOS中的Security.framework提供了對RSA算法的支持.這種方式需要對密匙對進行處理, 根據public key生成證書, 通過private key生成p12格式的密匙.除了Secruty.framework, 也可以將openssl庫編譯到iOS工程中, 這可以提供更靈活的使用方式.本文使用Security.framework的方式處理RSA.
步驟:
? ? ? ? ?下面說一下生成公鑰私鑰的步驟。打開終端,按照以下輸入即可(注意:在Mac上我一直沒找到生成公鑰私鑰的路徑,所以讓android在windows上幫我生成了一遍,他直接就可以導出來),iOS這邊需要der文件和p12文件。步驟如下
生成私鑰文件
$ openssl genrsa -out private.pem 1024
openssl:是一個自由的軟件組織,專注做加密和解密的框架。
genrsa:指定了生成了算法使用RSA
-out:后面的參數表示生成的key的輸入文件
1024:表示的是生成key的長度,單位字節(bits)
創建證書請求
$ openssl req -new -key private.pem -out rsacert.csr
可以拿著這個文件去數字證書頒發機構(即CA)申請一個數字證書。CA會給你一個新的文件cacert.pem,那才是你的數字證書。(要收費的)
生成證書并簽名,有效期10年
$ openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
509是一種非常通用的證書格式。
將用上面生成的密鑰privkey.pem和rsacert.csr證書請求文件生成一個數字證書rsacert.crt。這個就是公鑰
轉換格式 將 PEM 格式文件 轉換成 DER 格式
$ openssl x509 -outform der -in rsacert.crt -out rsacert.der
在 iOS開發中,公鑰是不能使用base64編碼的,上面的命令是將公鑰的base64編碼字符串轉換成二進制數據
導出 P12 文件
在iOS使用私鑰不能直接使用,需要導出一個p12文件。下面命令就是將私鑰文件導出為p12文件。
$ openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
以上步驟就生成了公鑰私鑰。代碼如下:
controller里面的代碼:
獲取公鑰:
獲取私鑰:
加密:
解密:
??
以上這種方法適用于公鑰加密,私鑰解密,假如用私鑰加密,公鑰解密,這種方案就不行了,就不能用Secruty.framework了,就得用openssl庫了,具體openssl庫怎么用,還沒有研究,嘿嘿,以后再說吧。
總結:
? ? ? ? ?這種加密傳輸方式會被用在網銀類或者金融類App中.金融類app都會采用全站https方案,采用這種加密方式,也是為了保險。