AES加密常量输入输出大小

AES encryption constant input and output size

我有一个用于 AES 加密的密钥,我也在尝试加密具有恒定长度的字符串,生成的加密字符串是否始终具有相同的长度?

这取决于你'the same length'的意思。

与原字符串长度相同:一般不会;原始字符串将被填充为密码块长度的倍数。检查填充模式以获取详细信息。

每次加密长度相同:是;只要您坚持使用相同的模式并填充加密输出将具有相同的长度。

首先,块密码需要一个完整的块来加密,因此AES需要16字节(或128位)的输入来加密将输出16字节的密文。分组密码总是这种情况,因为它们是伪随机排列 (PRP) - 它们始终是我们期望它们是 PRP 的排列。

分组密码,如 AES,是原始密码,必须与 proper mode of operation 一起使用。这里我们只说其中的一部分。

  • ECB 模式 是默认且不安全的。

    Padding: 在消息大小不是128的倍数的情况下,我们应用padding。有各种填充,但是,最常见的是 PCKS#7(PCKS#5 的更新,用于 64 位块密码,如 DES)。此填充将字符附加到末尾,以便大小是 128 的倍数。

    因此; ECB 模式的附加字符数可以从 1 到 16(如果块大小已经是 128 的倍数)然后添加一个新块 16 10 字节。

  • CBC模式需要一个随机且不可预测的IV,这样我们才能实现概率加密。与欧洲央行一样,它需要填充。

    因此; CBC 模式的附加字符数可以从 1+16 到 32,因为我们需要将 IV 添加到密文中。

  • CTR 模式 要求初始值 (IV) 可以是随机的或确定性的。 CTR 模式将分组密码 (PRP) 转换为流密码。明文与密文进行异或运算,其中输入为 IV,并针对每次加密递增。 CTR模式不需要padding

    因此; CTR模式的追加字符数(最多)16.

  • AAED:以上是古老的操作模式,今天我们使用经过身份验证的加密(带有关联数据)(AE/AEAD)。与古老的模式不同,这些模式不仅可以为我们提供机密性,还可以为我们提供完整性和身份验证。

    身份验证部分需要一个 标签(MAC 标签),这实际上取决于方案。

    • AES-GCM 是 NIST 批准的模式。 AES-GCM 推荐的 IV 尺寸 12,因为不同的尺寸需要额外的过程。它总是生成一个 16 字节的标签,但是,如果他们愿意,可以减小标签的大小,尽管不推荐。

      一开始可能会认为大小增加了12-16,但事实并非如此。 GCM 始终使用关联数据 (AD) 并允许 zeroAD 并且始终添加 AD 的大小。详情见NIST GCM specification

这是关于 mode of operations 在输入与输出长度方面的表现的一长串短篇故事。

如果省略 IV 大小,则可以使用 CTR 模式。