RSA加密算法是一種非對(duì)稱的加密算法,使用時(shí)需要一對(duì)密鑰(yue),公鑰用來(lái)加密乾胶,私鑰用來(lái)解密。關(guān)于RSA的的特性和優(yōu)缺點(diǎn)大家可以度娘或者谷歌朽寞。這篇文章主要介紹java后臺(tái)识窿,安卓與iOS三個(gè)平臺(tái)的需要的密鑰的生成以及iOS端的使用。
前幾天趕項(xiàng)目脑融,有一個(gè)需求是關(guān)于RSA加密的喻频,關(guān)于RSA加密我只是有所耳聞,沒(méi)有實(shí)際使用過(guò)肘迎,于是照葫蘆畫瓢使用公司庫(kù)里的RSA加解密工具甥温,按理說(shuō)在之前的項(xiàng)目中使用Key字符串的形式是可以加解密成功的,可我嘗試使用base64編碼格式的私鑰和pkcs8編碼格式的私鑰都無(wú)法解出公鑰加密的密文妓布。俗話說(shuō)不能一條路走到黑姻蚓,所以我就果斷轉(zhuǎn)向嘗試使用密鑰文件來(lái)解決這個(gè)問(wèn)題,所幸最終還是找到解決了這個(gè)問(wèn)題匣沼。如以上所說(shuō)問(wèn)題在于—后臺(tái)給的密鑰編碼格式與iOS開發(fā)需要的格式不符合狰挡。定位到問(wèn)題后開始解決問(wèn)題。
由于生成的密鑰需要在不同的平臺(tái)上使用,首先明確不同的平臺(tái)需要什么編碼格式的密鑰圆兵,在我的這個(gè)項(xiàng)目中,有iOS,Andriod兩個(gè)客戶端平臺(tái)以及Java后臺(tái)枢贿,其中iOS需要p12編碼格式的私鑰殉农,der編碼格式的公鑰;Andriod和Java需要base64編碼的公鑰局荚,pkcs8編碼格式的私鑰超凳。至于其他的平臺(tái)如PHP,前端由于在這個(gè)項(xiàng)目中用不上耀态,就沒(méi)有具體了解轮傍。需要的同學(xué)自行查閱資料。
明確需求后使用openssl生成適當(dāng)編碼格式的密鑰首装,Mac自帶openssl创夜,只需在終端打開即可,Windows系統(tǒng)需要下載openssl仙逻,以下介紹生成密鑰的過(guò)程驰吓。
在生成密鑰之前最好在桌面建立一個(gè)文件夾,然后在終端cd到這個(gè)文件夾系奉,之后生成的文件都會(huì)放到這個(gè)文件夾中檬贰,便于管理,生成文件的過(guò)程中也可以在文件夾中直觀的觀察到缺亮。
1翁涤、終端打開openssl
openssl
2、生成pem(base64)編碼格式的私鑰萌踱,密鑰強(qiáng)度為1024葵礼,即需要加密的字符串長(zhǎng)度不能超過(guò)1024字節(jié)
genrsa -out atrsa_private_key.pem 1024
3、生成per(base64)編碼格式的公鑰并鸵,這個(gè)公鑰可以在Andriod和Java平臺(tái)使用
rsa -in atrsa_private_key.pem -pubout -out atrsa_public_key.pem
4章咧、對(duì)私鑰進(jìn)行PKCS8編碼,此時(shí)生成的pkcs8_atrsa_private_key.pem文件內(nèi)的私鑰可以提供給Java和Android使用
pkcs8 -topk8 -in atrsa_private_key.pem -out pkcs8_atrsa_private_key.pem -nocrypt
5能真、以上生成的密鑰文件通過(guò)用文本編輯器打開赁严,拷貝對(duì)應(yīng)的密鑰就可以給Java和Andriod使用,下面介紹供iOS使用的密鑰的生成過(guò)程粉铐。首先創(chuàng)建證書請(qǐng)求疼约,這里并不是真的生成了證書,只是發(fā)送了一個(gè)請(qǐng)求
req -new -out atrsacert.csr -key atrsa_private_key.pem
按照要求輸入相應(yīng)信息就行蝙泼,密碼可以為空程剥,我是將密碼設(shè)置為空,因?yàn)槲也淮_定Java和Andriod平臺(tái)是否有解密的方法。
6织鲸、生成證書并簽名
x509 -req -days 3650 -in atrsacert.csr -signkey atrsa_private_key.pem -out atrsacert.crt
7舔腾、轉(zhuǎn)換格式,將PEM 格式文件轉(zhuǎn)換成 DER 格式搂擦,這里生成的就是iOS開發(fā)中需要用到的公鑰文件
x509 -outform der -in atrsacert.crt -out atrsacert.der
8稳诚、導(dǎo)出P12文件,也就是需要用到的私鑰文件
pkcs12 -export -out atrsa_private_key.p12 -inkey atrsa_private_key.pem -in atrsacert.crt
自此瀑踢,iOS,Android扳还,Java需要的密鑰生成完畢,如下圖所示
其中pkcs8_atrsa_private_key.pem和atrsa_public_key.pem通過(guò)文本編輯方式打開后的數(shù)據(jù)如圖二所示橱夭,交給Java和Andriod即可氨距,如下圖所示:
解決了根本的問(wèn)題,在iOS中使用這些密鑰文件就很簡(jiǎn)單了棘劣,首先將der格式的公鑰和p12格式的私鑰導(dǎo)入工程俏让。然后如下圖使用就可以完成:
關(guān)于這個(gè)工具類,是我在網(wǎng)上搜到有前輩從GitHub上轉(zhuǎn)過(guò)來(lái)的茬暇,我把那個(gè)網(wǎng)址給忘了舆驶,實(shí)在是不好意思,在此對(duì)ATRSATool的原作者致謝而钞。
為了方便大家沙廉,我把工具類上傳到了GitHub,地址如下臼节,需要的話可以去下載
https://github.com/ZZJJLL/ATRSATool.git
參考鏈接如下撬陵,也感謝提供這些資料的作者。
http://www.reibang.com/p/bb2bd32e8794
http://blog.csdn.net/jdsjlzx/article/details/41441147
本人對(duì)于RSA只了解一些皮毛网缝,以上如有不正確的地方還望各位指正巨税。