【发布时间】:2021-12-12 13:38:09
【问题描述】:
我有一个用于 AES 加密的密钥,并且我也在尝试加密具有恒定长度的字符串,生成的加密字符串是否总是具有相同的长度?
【问题讨论】:
标签: string encryption cryptography aes
我有一个用于 AES 加密的密钥,并且我也在尝试加密具有恒定长度的字符串,生成的加密字符串是否总是具有相同的长度?
【问题讨论】:
标签: string encryption cryptography aes
这取决于您所说的“相同长度”的含义。
与原字符串长度相同:一般没有;原始字符串将被填充为密码块长度的倍数。检查填充模式以了解详细信息。
每次加密时长度相同:是的;只要您坚持使用相同的模式并填充加密输出将具有相同的长度。
【讨论】:
首先,块密码需要一个完整的块来加密,因此 AES 需要 16 字节(或 128 位)输入来加密,将输出 16 字节密文。分组密码总是如此,因为它们是伪随机排列 (PRP) - 它们始终是我们期望它们是 PRP 的排列。
分组密码(如 AES)是原语,必须与 proper mode of operation 一起使用。这里我们只讨论其中的一部分。
ECB 模式是默认且不安全的。
Padding:在消息大小不是128倍数的情况下,我们应用padding。有各种填充,但是,最常见的是 PCKS#7(PCKS#5 的更新,用于 DES 等 64 位块密码)。此填充将字符附加到末尾,以便大小为 128 的倍数。
因此; ECB 模式的附加字符数可以是 1 到 16(如果块大小已经是 128 的倍数),则添加一个新块,其中包含 16 个10 字节。
CBC模式需要一个随机且不可预测的IV,这样我们才能实现概率加密。与欧洲央行一样,它需要填充。
因此; CBC模式的附加字符数可以从1+16到32,因为我们需要将IV添加到密文中。
点击率模式需要可以是随机或确定性的初始值 (IV)。 CTR 模式将分组密码 (PRP) 转换为流密码。明文与密文进行 x 或运算,其中输入是 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 模式。
【讨论】: