該文章是《揭開RSA神秘面紗(ios篇)》系列第二篇,建議插隊的童鞋從第一篇開始看慎恒,傳送門:
<a href='http://www.reibang.com/p/84d925e4a57d'><h5>解開RSA神秘面紗(一):初識RSA</a>
初體驗
<p>心急的童鞋們橄唬,準(zhǔn)備好了么退疫,讓我們來體驗下RSA的工作原理吧。先來體驗下效果,github代碼地址:
<a >https://github.com/Vken-Chen/RSADemo1</a>
趕緊下載運行下
<p>簡單描述下Demo的使用:
<li>1勾哩,點擊TestEncrypt</li>
<li>2抗蠢,點擊TestDecrypt根盒,點開Log窗口,查看打印的日志</li>
<p>bingo物蝙!加密解密兩個步驟成功執(zhí)行了炎滞!是不是覺得RSA并不是想象中的那么難。細(xì)心的童鞋肯定會Debug單步去跟蹤過程(為這些童鞋點贊)诬乞。
1. 疑問
運行了Demo,第一反應(yīng)是高興册赛,第二反應(yīng)肯定會產(chǎn)生疑問:
<li>1,Demo中的公鑰和私鑰是怎么來的?</li>
<li>2,VKRSA和VKRSAKeyHelper這兩個類代碼看上去好復(fù)雜,怎么去理解?</li>
1.1 解析
回顧開篇講到的RSA的工作原理:
<li>1.生成私鑰和公鑰</li>
Demo中已經(jīng)自動集成了已經(jīng)生成好的公鑰和私鑰
<li>2.用公鑰對原始數(shù)據(jù)進行加密震嫉,得到密文</li>
Demo中VKRSA類中封裝了加密操作森瘪,外部調(diào)用即可
<li>3.用私鑰對密文進行解密,得到原始數(shù)據(jù)</li>
Demo中VKRSA類中封裝了解密操作票堵,外部調(diào)用即可
1.2 密鑰的生成
目前最通用生成RSA密鑰的方式通過openssl工具來簽發(fā)公鑰和私鑰扼睬。當(dāng)然也有其他方式,比如自己寫程序生成密鑰對悴势,java(Security包)窗宇、C++(openssl SDK)、OC(Security.framework)都有對應(yīng)的函數(shù)接口特纤。這里主要講通過openssl工具來生成密鑰對军俊。
1.2.1 openssl簽發(fā)密鑰對順序
當(dāng)然,如果沒有openssl的環(huán)境捧存,需要安裝一個粪躬,相信你肯定可以快速自行解決。密鑰對步驟如下:
<li><h5>1.生成私鑰文件</li>
terminal:openssl genrsa -out rsa_private_key.pem 1024
說明:“rsa_private_key.pem”為生成私鑰pem文件名昔穴,”1024“是指私鑰長度镰官。
執(zhí)行成功會在當(dāng)前文件夾下生成rsa_private_key.pem的私鑰文件
<li><h5>2.通過生成的私鑰文件簽發(fā)一個公鑰文件</li>
terminal:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
說明:“rsa_private_key.pem”為第一步生成私鑰文件,"rsa_public_key.pem"為導(dǎo)出的公鑰文件
<li><h5>3.把生成的私鑰文件轉(zhuǎn)成pkcs8格式的pem文件</li>
terminal:openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem
注意:“ -out rsa_private_key_pkcs8.pem”必須加上,不然會把內(nèi)容輸出到terminal吗货,而且內(nèi)容還不同泳唠。具體原因未仔細(xì)查詢,如有同學(xué)知道卿操,請通知我警检,感謝!
整個流程如下圖
如下圖所示
1.2.2 密鑰文件格式說明
<p>文件生成了之后害淤,有的童鞋會問:
為什么這里的密鑰文件是pem格式的扇雕,與其他格式文件的差異是什么?比如:cer文件窥摄、der文件镶奉、csr文件、key文件、p12文件
<p>針對這個問題哨苛,請查看<a href='http://www.reibang.com/p/6927fe6f9813'>證書編碼以及文件格式匯總</a>
未完...下次更新