遇到的坑
项目中使用AES(CBC)和RSA组合进行加密,但是一直存在加密之后的数据,服务端无法解析,比例小但却是个问题。翻阅过很多资料之后发现以下几个问题:
1、RSA加密,线程不安全;
2、网上绝大部分的RSA加解密的秘钥存储在keychain中,但是keychainTag名却都是一模一样的,在你的项目导入的SDK含有的RSA加解密算法的keychainTag和你项目中一致时,会存在加解密失败的情况(在对接讯飞广告SDK4.1.2版本时,发现对方的广告解密失败,原因是解密的keychainTag一致);
3、AES/CBC模式加密对key的长度有要求,一般来说key的长度为16位时,使用的是CCCryptorStatus中的size_t使用kCCKeySizeAES256加密,大于16位时,使用kCCKeySizeAES256加密。
解决问题
话不多说直接上代码
代码链接:代码链接
1、RSA加密线程不安全问题和keychainTag名


2、AES/CBC模式加密key的长度判断


经过两个版本的迭代,服务端的同事不再找我麻烦了,舒服!
网友评论