tan*_*nou 5 encryption cryptography aes ios aes-gcm
所以我想问各位 stackoverflow 天才的问题是:是否有一种方法(本机、库、框架等)使用强大的经过身份验证的加密算法(例如GCM 模式)使用AES (最好是 128,但也可以是 256)来加密数据?
问题很短,我做了一些研究,我只找到了一个似乎支持它的库(RNCryptor),但它似乎也使用密码来加密而不是密钥(就像你提供密码,库制作了密钥),我不太喜欢这样,我更喜欢自己管理我的钥匙。
我还查看了CommonCryptor.h,发现了这一行,在我看来,这是 commoncryptor 源代码中 GCM 的唯一参考(但我可能是错的,实际上我可能是错的):
case kCCModeGCM: if((ref->symMode[direction].gcm = getCipherMode(cipher, mode, direction).gcm) == NULL) return kCCUnimplemented;
Run Code Online (Sandbox Code Playgroud)
提前致谢!
感谢 owlstead 建议我更深入地研究 RNCryptor 并找到了解决方案。
首先,经过大量谷歌搜索后,Zaph 似乎是对的,iOS 不提供 GCM,但在 iOS 中使用它。参考文献:iOS 安全 2014 年 2 月
其次,RNCryptor不使用GCM,而是使用CBC模式(密码块链接)的AES256,这很好,然后使用HMAC+SHA1进行身份验证。这符合我的要求。
为了使用密钥加密并跳过密码推导部分,RNCryptor 提供了以下函数:
NSData *encryptedData = [RNEncryptor encryptData:yourData
withSettings:kRNCryptorAES256Settings
encryptionKey:encryptionKey
HMACKey:HMACKey
error:&error];
Run Code Online (Sandbox Code Playgroud)
然后用这个解密
NSData *decryptedData = [RNDecryptor decryptData:encryptedData withEncryptionKey:encryptionKey HMACKey:HMACKey error:&decryptionError];
Run Code Online (Sandbox Code Playgroud)
RNCryptor 还提供密钥的随机生成方法。
注意:使用 AES256 时要小心,密钥调度可能很弱:Schneier 文章,但没有戏剧性,并且关于 AES256 的其他观点是优点:Colin Percival 文章
| 归档时间: |
|
| 查看次数: |
4214 次 |
| 最近记录: |