我在我的iOS应用程序中使用了一个开源加密库,在描述中声明它是AES 256位加密。这是否意味着只有密钥大小为AES 256位?
让我感到困惑的是Key Size是256,但算法和块大小是128.那么库使用哪种加密方式,为什么它们不同?
#define FBENCRYPT_ALGORITHM kCCAlgorithmAES128
#define FBENCRYPT_BLOCK_SIZE kCCBlockSizeAES128
#define FBENCRYPT_KEY_SIZE kCCKeySizeAES256
答案 0 :(得分:3)
这就是AES的工作原理 - 无论密钥大小如何,块大小都是128。这并不意味着它只使用128位密钥。 Wikipedia article。
中的完整信息答案 1 :(得分:3)
AES仅支持128位的块大小。它所基于的Rijndael确实支持不同的块大小。 AES-128,192和256之间存在一些差异(子密钥推导可能特定于密钥大小且轮数不同),但基础算法是相同的,并且始终使用128位(16字节)块
答案 2 :(得分:3)
这些常量在CommonCryptor.h中声明,其中包含有用的注释。
AES是一种块密码,无论密钥大小如何,都使用128位块。因此,kCCAlgorithmAES128
通常只是AES的“慢手”。
因此,代码表明它使用的是带有256位加密密钥的标准AES。
答案 3 :(得分:2)
AES标准(FIPS-197)(不仅仅是Rijndael算法)声明:
本标准规定了 Rijndael 算法([3]和[4]),一种对称分组密码,可以 使用密码密钥处理 128位的数据块,长度 128 , 192 , 256 位。 Rijndael旨在处理额外的块大小和密钥长度,但它们不是 本标准采用。