在Java中AES256加密需要多大的初始化向量?

时间:2015-06-30 07:30:07

标签: java encryption aes

我正在使用AES256加密和CFB模式。我必须使用32字节密钥。 但我对初始化向量有点困惑。 AES256应该使用多少字节的初始化向量? 是16个字节还是32个字节?

任何代码示例都将受到赞赏。

1 个答案:

答案 0 :(得分:4)

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可以配置不同的块大小。