0

我在我的 iOS 应用程序中使用了一个开源加密库,在描述中它声明它是 AES 256 位加密。这是否意味着只有密钥大小是 AES 256 位?

让我感到困惑的是,密钥大小是 256,但算法和块大小是 128。那么库使用的是哪种类型的加密,为什么它们不同?

#define FBENCRYPT_ALGORITHM     kCCAlgorithmAES128
#define FBENCRYPT_BLOCK_SIZE    kCCBlockSizeAES128
#define FBENCRYPT_KEY_SIZE      kCCKeySizeAES256
4

4 回答 4

3

这就是 AES 的工作方式——无论密钥大小如何,块大小都是 128。这并不意味着它只使用 128 位的密钥。维基百科文章中的完整信息。

于 2012-05-16T21:49:45.963 回答
3

AES 仅支持 128 位的块大小。不过,它所基于的 Rijndael 确实支持不同的块大小。AES-128、192 和 256 有一些区别(子密钥推导可能特定于密钥大小和轮数不同),但底层算法相同,始终使用 128 位(16 字节)块.

于 2012-05-16T21:50:47.337 回答
3

这些常量在CommonCryptor.h中声明,其中包括有用的注释。

AES 是一种分组密码,它使用 128 位块,而与密钥大小无关。因此,kCCAlgorithmAES128通常只是 AES 的“速记”。

因此,代码表明它使用的是标准 AES 和 256 位加密密钥。

于 2012-05-16T21:51:11.040 回答
2

AES 标准(FIPS-197)(不仅仅是 Rijndael 算法)指出:

该标准规定了Rijndael算法([3] 和 [4]),这是一种可以处理 128 位数据块的 对称分组密码, 使用 长度为 128、192256 的密码密钥。Rijndael 旨在处理额外的块大小和密钥长度,但本标准未采用它们。

于 2012-05-16T21:50:36.593 回答