java中AES-256加密需要多大的初始化向量?

java中AES-256加密需要多大的初始化向量?,java,encryption,aes,Java,Encryption,Aes,我正在使用AES-256加密和CFB模式。我必须使用32字节的密钥。 但是我对初始化向量有点困惑。 AES-256应使用多少字节的初始化向量? 是16字节还是32字节 任何代码示例都将不胜感激。TL;DR:CFB模式下的AES需要16字节的唯一(但不一定随机)IV IV的大小取决于模式,但通常与块大小相同,对于AES,块大小始终为16字节。有不同于此的模式,特别是GCM模式,默认大小为12字节,但可以采用任何大小的IV-尽管强烈建议保持默认值 然而,旧的学校模式,如CBC和CFB,只需要与区块

我正在使用AES-256加密和CFB模式。我必须使用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可以配置不同的块大小。

通常,IV的大小是AES中始终为128位(=16字节)的块大小,即使键大小大于块大小。为什么您会感到困惑?试着传递一个长度不是16字节的IV,看看会发生什么。Nit,因为necroed:在Java中说AES-256键是32字节(其中字节是8字节,在其他地方并不总是如此)是多余的、重复的、不必要的、超级的,以及其他一些不讨人喜欢的形容词——但不是伪造的。不管怎么说,投票结果是:dave_thompson_085这是一个非常挑剔的问题,你一定在那里有一个隧道显微镜:)不是真的;读课文对我来说很明显。但正如我所指出的,也许过于简洁,我同意这一点都不重要(nit),我也不会发布它,除非这个Q已经被另一个更新“从死亡中复活”(坏死):)我正要编辑并用“不一致/矛盾”替换“虚假”,但后来我发现虚假的一个定义实际上是“不可信;可疑或谬误”,因此从这个意义上讲,这种用法并不是完全错误的。