使用CCCrypt()进行AES128加密,密钥是否可以超过128位?

5

我正在使用CCCrypt方法。

我能使用比128位更长的密钥吗?它可以是任意长度吗?还是128的倍数?

如果可以,我该怎么做呢?

我认为这不可能,但我在这里找到了这段文字:这里

一些算法(如AES和RSA)允许使用不同长度的密钥,但其他算法是固定的,如DES和3DES。使用更长的密钥加密通常意味着更强的抵抗消息恢复。通常,安全性和时间之间存在权衡,因此请适当选择密钥长度。

AES如何允许不同长度的密钥,它是否忽略高于128的位?

这让我很苦恼。


它不会忽略它们,而是将它们组合成正确大小的键。 - Louis Ricci
2个回答

7
AES(高级加密标准)实际上是三个相关的分组密码算法(如果将加密和解密分别计算,则为三对算法)。它们都使用128位块(16字节)。
最常用的是AES-128,它需要一个128位的密钥(即16字节)。AES-192需要一个192位的密钥(24字节),AES-256需要一个256位的密钥(32字节)。
这三个算法的工作方式类似,但仍有所不同(长密钥的算法需要更多“轮”内部混淆操作,因此密钥的所有位都可以以某种方式影响密文的所有位)。因此,所有这些算法的密钥加密和解密方式都不同(即没有一个AES-256密钥可以做与AES-128密钥相同的事情)。
话虽如此,我不幸地不知道CommonCrypto库是否支持所有AES变体,如果是(我想是的话),又该如何选择正确的算法。

我知道这篇文章已经有些旧了,但是针对其他还在寻找答案的读者,我使用CommonCrypto进行AES128加密,并使用256字节和128字节作为密钥。因此,我认为192字节的密钥也应该可以使用。 - slycrel
1
@slycrel 我不知道你做了什么(或者CommonCrypto-API是怎么工作的),但AES-128只需要128位密钥。带有256位密钥的版本被称为AES-256,带有192位密钥的版本被称为AES-192。 - Paŭlo Ebermann
也许我理解错了什么,或者表述不当... 我认为AES始终是128位,具有不同的密钥大小。这不是我的原始来源,但这是一个很好的介绍:http://blog.agilebits.com/2013/03/09/guess-why-were-moving-to-256-bit-aes-keys/ 所以可能只是术语问题。如果是这样,我道歉。 - slycrel
AES的块大小始终为128位,这就是为什么这个数字不是名称的一部分。名称中的数字是密钥大小。 - Paŭlo Ebermann

5

Paulo的解释非常好!比苹果文档要好得多;-)

现在,为了将这些知识应用于iOS环境中......你需要知道,在cccrypt(像其在man页面中的命名一样),它经常在其他网站被称为CommonCrypto(这可以便于您的搜索)。

然而,你不会找到太多东西,直到你意识到这部分是开源软件,并且真正缺乏文档。

但是,一旦你找到了这个,你就可以搜索源代码以找到CommonCrypto.h和你可以使用的枚举,其中包括:kCCKeySizeAES128kCCKeySizeAES192kCCKeySizeAES256 - 所以在iOS上,是的你可以使用256位密钥与AES一起使用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接