知識(shí)補(bǔ)充:
? ? ? ?RSA算法是一種非對(duì)稱加密算法,常被用于加密數(shù)據(jù)傳輸.
RSA基本原理:
? ? ? ?RSA使用"秘匙對(duì)"對(duì)數(shù)據(jù)進(jìn)行加密解密.在加密解密數(shù)據(jù)前,需要先生成公鑰(public key)和私鑰(private key).
? ? ? ? 公鑰(public key): 用于加密數(shù)據(jù). 用于公開, 一般存放在數(shù)據(jù)提供方, 例如iOS客戶端.
? ? ? ? ?私鑰(private key): 用于解密數(shù)據(jù). 必須保密, 私鑰泄露會(huì)造成安全問題.
? ? ? ? ?iOS中的Security.framework提供了對(duì)RSA算法的支持.這種方式需要對(duì)密匙對(duì)進(jìn)行處理, 根據(jù)public key生成證書, 通過private key生成p12格式的密匙.除了Secruty.framework, 也可以將openssl庫(kù)編譯到iOS工程中, 這可以提供更靈活的使用方式.本文使用Security.framework的方式處理RSA.
步驟:
? ? ? ? ?下面說一下生成公鑰私鑰的步驟鳄袍。打開終端展鸡,按照以下輸入即可(注意:在Mac上我一直沒找到生成公鑰私鑰的路徑又碌,所以讓android在windows上幫我生成了一遍,他直接就可以導(dǎo)出來)尉咕,iOS這邊需要der文件和p12文件叠蝇。步驟如下
生成私鑰文件
$ openssl genrsa -out private.pem 1024
openssl:是一個(gè)自由的軟件組織,專注做加密和解密的框架。
genrsa:指定了生成了算法使用RSA
-out:后面的參數(shù)表示生成的key的輸入文件
1024:表示的是生成key的長(zhǎng)度,單位字節(jié)(bits)
創(chuàng)建證書請(qǐng)求
$ openssl req -new -key private.pem -out rsacert.csr
可以拿著這個(gè)文件去數(shù)字證書頒發(fā)機(jī)構(gòu)(即CA)申請(qǐng)一個(gè)數(shù)字證書年缎。CA會(huì)給你一個(gè)新的文件cacert.pem,那才是你的數(shù)字證書蟆肆。(要收費(fèi)的)
生成證書并簽名,有效期10年
$ openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
509是一種非常通用的證書格式晦款。
將用上面生成的密鑰privkey.pem和rsacert.csr證書請(qǐng)求文件生成一個(gè)數(shù)字證書rsacert.crt。這個(gè)就是公鑰
轉(zhuǎn)換格式 將 PEM 格式文件 轉(zhuǎn)換成 DER 格式
$ openssl x509 -outform der -in rsacert.crt -out rsacert.der
在 iOS開發(fā)中,公鑰是不能使用base64編碼的,上面的命令是將公鑰的base64編碼字符串轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
導(dǎo)出 P12 文件
在iOS使用私鑰不能直接使用枚冗,需要導(dǎo)出一個(gè)p12文件缓溅。下面命令就是將私鑰文件導(dǎo)出為p12文件。
$ openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
以上步驟就生成了公鑰私鑰赁温。代碼如下:
controller里面的代碼:
獲取公鑰:
獲取私鑰:
加密:
解密:
??
以上這種方法適用于公鑰加密坛怪,私鑰解密,假如用私鑰加密股囊,公鑰解密袜匿,這種方案就不行了,就不能用Secruty.framework了稚疹,就得用openssl庫(kù)了居灯,具體openssl庫(kù)怎么用,還沒有研究,嘿嘿怪嫌,以后再說吧义锥。
總結(jié):
? ? ? ? ?這種加密傳輸方式會(huì)被用在網(wǎng)銀類或者金融類App中.金融類app都會(huì)采用全站https方案,采用這種加密方式,也是為了保險(xiǎn)岩灭。