java 中的 AES-256 加密需要多大的初始化向量?
What size of initialization vector needed for AES-256 encryption in java?
我在 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 可以配置不同的块大小。
我在 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 可以配置不同的块大小。