Java 中的 AES-256 加密需要多大的初始化向量?
2022-09-04 19:50:23
我正在使用带有CFB模式的AES-256加密。我必须使用32字节的密钥。但是我对初始化向量有点困惑。AES-256 应使用多少字节的初始化向量?是16字节还是32字节?
任何代码示例都将不胜感激。
我正在使用带有CFB模式的AES-256加密。我必须使用32字节的密钥。但是我对初始化向量有点困惑。AES-256 应使用多少字节的初始化向量?是16字节还是32字节?
任何代码示例都将不胜感激。
TL;DR:CFB 模式下的 AES 需要 16 字节的唯一(但不一定是随机)IV。
IV的大小取决于模式,但通常它与块大小相同,对于AES,块大小始终为16字节。有些模式与此不同,特别是GCM模式,其默认大小为12字节,但可以采用任何大小的IV - 尽管强烈建议保持默认值。
然而,CBC和CFB等旧式模式只需要与块大小相同的IV。即使CTR通常也需要16个字节,尽管原则上IV可以是小于16的任何大小,在这种情况下,它(再次,通常)用零值字节填充。请注意,CTR 通常使用初始计数器值进行初始化,这意味着您必须确保计数器不会自行重复。
无论密钥大小如何,AES 的块大小均为 16 字节。说你有AES-256和32字节的密钥是多余的信息。对于 AES-256,密钥大小必须为 256 位或 32 字节。
如前所述,CFB 模式的 IV 必须始终为 16 字节,因为 AES 是 128 位块密码。与Rijndael密码相比,AES在块大小方面受到限制。Rijndael可以配置不同的块大小。