5

我正在使用该CCCrypt方法。

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

如果是这样,我会怎么做?

我不认为这是可能的,但我发现了这段文字:here

一些算法,如 AES 和 RSA 允许不同长度的密钥,但其他算法是固定的,如 DES 和 3DES。使用更长的密钥进行加密通常意味着对消息恢复的抵抗力更强。As usual, there is a trade off between security and time, so choose the key length appropriately.

AES 如何允许不同的长度,它会忽略高于 128 的位吗?

我正在为此拔头发。

4

2 回答 2

7

AES(高级加密标准)实际上是三个相关的分组密码算法(或算法对,如果单独计算加密和解密)的集合。它们都适用于 128 位块(16 字节)。

最常用的是 AES-128,它采用 128 位密钥(即 16 字节)。AES-192 采用 192 位密钥(24 字节),AES-256 采用 256 位密钥(32 字节)。

这三种算法以相似但仍然不同的方式工作(并且更长的密钥需要更长的时间,因为它们会进行更多“轮”的内部混淆操作,因此密钥的所有位都可以以某种方式影响密文的所有位)。因此,所有这些算法的所有这些密钥都以不同的方式加密和解密(即没有 AES-256 密钥与 AES-128 密钥做同样的事情)。

也就是说,不幸的是,我不知道 CommonCrypto 库是否支持 AES 的所有变体,如果支持(我想是这样),如何选择正确的。

于 2011-10-14T23:38:05.450 回答
5

保罗的解释很棒!并且比有关该主题的 Apple 文档要好得多;-)

现在把这些知识放在 iOS 上下文中......你需要知道cccrypt(就像它在手册页中命名的那样)通常在网站的其他地方被命名为CommonCrypto (它可以方便你的搜索)。

然而,在您意识到这部分是开源软件并且确实缺乏文档之前,您不会发现太多。

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

于 2011-10-15T02:42:06.860 回答