## RSA
### 獲取公私密鑰
1. 生成公私密鑰 pub和priv
? ? >>> import rsa
? ? >>> (pubkey, privkey) = rsa.newkeys(512)
2. 讀入公私密鑰文件
? ? >>> import rsa
? ? >>> with open('private.pem', mode='rb') as privatefile:
? ? ...? ? keydata = privatefile.read()
? ? >>> privkey = rsa.PrivateKey.load_pkcs1(keydata)
### 加密和解密
? ? # 公鑰加密韩容,私鑰解密
? ? >>> import rsa
? ? >>> (bob_pub, bob_priv) = rsa.newkeys(512)
? ? >>> message = 'hello Bob!'.encode('utf8')
? ? >>> crypto = rsa.encrypt(message, bob_pub)
? ? >>> message = rsa.decrypt(crypto, bob_priv)
? ? >>> print(message.decode('utf8'))
? ? hello Bob!
### 簽名和驗證
? ? # 私鑰簽名迄损,公鑰驗證
? ? >>> (pubkey, privkey) = rsa.newkeys(512)
? ? >>> message = 'Go left at the blue tree'
? ? >>> signature = rsa.sign(message, privkey, 'SHA-1')
? ? >>> rsa.verify(message, signature, pubkey)
? ? True
## ios 簽名
1. mac電腦本地生成公私密鑰 mac_priv_l, mac_pub_l
2. 蘋果公司有一對公私密鑰 apple_priv, apple_pub戚啥。私鑰保存在蘋果服務(wù)器,公鑰保存在ios手機上
3. 申請證書:把公鑰 mac_pub_l 傳到蘋果后臺往堡,用蘋果后臺里的私鑰 apple_priv 去簽名公鑰 mac_pub_l。得到一份數(shù)據(jù)包含了公鑰 mac_pub_l 以及其簽名舍哄,把這份數(shù)據(jù)稱為證書肺孵。
4. ipa簽名:在開發(fā)時,編譯完一個 APP 后碴倾,用本地的私鑰 mac_priv_l 對這個 APP 進行簽名,同時把第三步得到的證書一起打包進 APP 里,安裝到手機上跌榔。
5. 安裝ipa:在安裝時异雁,iOS 系統(tǒng)取得證書,通過系統(tǒng)內(nèi)置的公鑰 apple_pub僧须,去驗證證書的數(shù)字簽名是否正確纲刀。
6. 安裝ipa:驗證證書后確保了公鑰 mac_pub_l 是蘋果認證過的,再用公鑰 mac_pub_l 去驗證 APP 的簽名担平,這里就間接驗證了這個 APP 安裝行為是否經(jīng)過蘋果官方允許示绊。
這里只驗證安裝行為,不驗證APP 是否被改動暂论,因為開發(fā)階段 APP 內(nèi)容總是不斷變化的面褐,蘋果不需要管。
這一步保證了:
1. mac_pub_l 是經(jīng)過蘋果認證的取胎,合法開發(fā)者所擁有的公鑰
2. 安裝到手機上的ipa包展哭,經(jīng)過了開發(fā)者的公私鑰驗證,是完整的安裝包
3. 安裝包不需要傳到蘋果服務(wù)器闻蛀,可以直接安裝到手機上