## 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。私钥保存在苹果服务器,公钥保存在ios手机上
3. 申请证书:把公钥 mac_pub_l 传到苹果后台,用苹果后台里的私钥 apple_priv 去签名公钥 mac_pub_l。得到一份数据包含了公钥 mac_pub_l 以及其签名,把这份数据称为证书。
4. ipa签名:在开发时,编译完一个 APP 后,用本地的私钥 mac_priv_l 对这个 APP 进行签名,同时把第三步得到的证书一起打包进 APP 里,安装到手机上。
5. 安装ipa:在安装时,iOS 系统取得证书,通过系统内置的公钥 apple_pub,去验证证书的数字签名是否正确。
6. 安装ipa:验证证书后确保了公钥 mac_pub_l 是苹果认证过的,再用公钥 mac_pub_l 去验证 APP 的签名,这里就间接验证了这个 APP 安装行为是否经过苹果官方允许。
这里只验证安装行为,不验证APP 是否被改动,因为开发阶段 APP 内容总是不断变化的,苹果不需要管。
这一步保证了:
1. mac_pub_l 是经过苹果认证的,合法开发者所拥有的公钥
2. 安装到手机上的ipa包,经过了开发者的公私钥验证,是完整的安装包
3. 安装包不需要传到苹果服务器,可以直接安装到手机上