密码算法 AES 和 AES_128 之间有什么区别

What is the difference between cipher algorithms AES and AES_128

根据应用程序开发人员的文档,AES_128AES_256 受 api 支持26. https://developer.android.com/reference/javax/crypto/Cipher。例如,现在我正在使用 AES(GCM 模式) 和 128 位密钥。带 128 位密钥的 AESAES_128 有什么区别?

使用 128-bit 键的 AESAES_128 没有区别。

正如您在链接的文档中看到的那样,在 API 26 之前存在一种 AES 原语,具有各种填充 options/modes 操作。

为了使事情更简单,在 API 26+ 中现在有两个原语来消除 AES 与确定的 128-bit256-bit 键的用法的歧义。

如果您使用 AES,您应该选择 AES-256 GCM,因为它提供经过身份验证的加密,确保密文不会在收件人不知情的情况下被篡改。

AES-GCM 使用 32 位计数器运行,因此不幸的是,使用相同的密钥、随机数 (IV) 对,您只能安全地加密 ~ 64GB 数据 (2^39-256 bits).

如果您想使用更安全的密码,我推荐 XSalsa20XChaCha20,它们提供 192-bit 随机数大小,实际上允许 "unlimited"要使用相同密钥、随机数对加密的数据量。

AES_128 不存在。但是,Java 中的常量通常不使用连字符 (-),因此下划线用于指示 AES-128(如果您询问 String 仍然是一个奇怪的选择我)。

AES-128 只是 AES 配置 使用 128 位密钥。它在内部使用特定的子密钥派生和 10 轮。 AES-256 具有不同的子密钥推导并使用 14 轮。 AES-192(12 轮)使用不多,因为它的密钥大小很笨拙,而且不能完全抵御可能适用于 AES-128 的攻击。

实际上,就一般用法而言,可能存在两个差异。首先,API 可能能够 select 实现 128 或 256 位 AES 调用 init 方法之前。其次,我假设 init 方法在配置 AES-128 时只接受 128 位密钥。