可以在iOS上使用AES128和GCM模式吗?

可以在iOS上使用AES128和GCM模式吗?,ios,encryption,cryptography,aes,aes-gcm,Ios,Encryption,Cryptography,Aes,Aes Gcm,所以我要问的问题是:如果有一种方法(本机、库、框架等等)可以使用经过验证的加密算法(最好是128,但也可以是256)使用AES对数据进行加密(最好是128),比如说GCM模式 问题很简单,我做了一些研究,发现只有一个库似乎支持它(),但它似乎也使用密码而不是密钥进行加密(就像你提供了密码,库制作了密钥),我不太喜欢这样,我更喜欢自己管理密钥 我还查看了这一行,发现这一行在我看来是commoncryptor源代码中GCM的唯一参考(但我可能错了,实际上我可能错了): 提前谢谢 CommonCryp

所以我要问的问题是:如果有一种方法(本机、库、框架等等)可以使用经过验证的加密算法(最好是128,但也可以是256)使用AES对数据进行加密(最好是128),比如说GCM模式

问题很简单,我做了一些研究,发现只有一个库似乎支持它(),但它似乎也使用密码而不是密钥进行加密(就像你提供了密码,库制作了密钥),我不太喜欢这样,我更喜欢自己管理密钥

我还查看了这一行,发现这一行在我看来是commoncryptor源代码中GCM的唯一参考(但我可能错了,实际上我可能错了):


提前谢谢

CommonCrypto中缺少GCM。有趣的是,苹果从ios5开始就使用GCM作为密钥链。

RNCryptor使用HMAC,这被认为是创建身份验证标签的一种加密功能强大的方法。它也是开源的。所以我会认真考虑克隆RNIKORTOR代码(保持标题中的版权完整!) 基于密码的加密包括派生密钥(可能还有IV),然后执行加密和身份验证。因此,通过简单地删除键派生部分,您应该可以获得更大的成功


唯一不起作用的时候是,如果密钥派生代码被编织到加密/身份验证的部分,但这似乎不是RNCryptor的情况。

多亏了owlstead,我建议深入研究RNCryptor并找到解决方案

首先,在谷歌搜索了很多次之后,Zaph似乎是对的,iOS不提供GCM,而是在iOS中使用它。请参阅:

其次,RNCryptor不使用GCM,而是在CBC模式下使用AES256(密码块链接),这很好,然后使用HMAC+SHA1进行身份验证。这符合我的要求

要使用密钥加密并跳过密码派生部分,RNCryptor提供以下功能:

NSData *encryptedData = [RNEncryptor encryptData:yourData
                                        withSettings:kRNCryptorAES256Settings
                                       encryptionKey:encryptionKey
                                             HMACKey:HMACKey
                                               error:&error];
然后用这个解密

NSData *decryptedData = [RNDecryptor decryptData:encryptedData withEncryptionKey:encryptionKey HMACKey:HMACKey error:&decryptionError];
RNCryptor还提供密钥的随机生成方法


注意:在使用AES256时要小心,关键时刻表可能很弱:但没有戏剧性,而且AES256上还有其他优点:

我们的SecureBackbox支持AES-GCM,并可用于iOS。但这是未记录的功能,所以您需要在我们的论坛上索取示例。谢谢,伙计!我听从了你的建议,在RNCryptor中使用密钥并跳过密钥派生实际上是可能的。然而,RNCryptor不使用GCM,而是使用CBC,然后使用HMAC+SHA1,但这符合我的要求。谢谢你的指导!我真的很惊讶CommonCrypto中缺少可用的模式/方法,同时看到苹果在iOS中使用了大多数(或至少很多)模式/方法()
NSData *decryptedData = [RNDecryptor decryptData:encryptedData withEncryptionKey:encryptionKey HMACKey:HMACKey error:&decryptionError];