密码算法 AES 和 AES_128 之间有什么区别
What is the difference between cipher algorithms AES and AES_128
根据应用程序开发人员的文档,AES_128 和 AES_256 受 api 支持26. https://developer.android.com/reference/javax/crypto/Cipher。例如,现在我正在使用 AES(GCM 模式) 和 128 位密钥。带 128 位密钥的 AES 和 AES_128 有什么区别?
使用 128-bit
键的 AES
和 AES_128
没有区别。
正如您在链接的文档中看到的那样,在 API 26
之前存在一种 AES 原语,具有各种填充 options/modes 操作。
为了使事情更简单,在 API 26+
中现在有两个原语来消除 AES
与确定的 128-bit
或 256-bit
键的用法的歧义。
如果您使用 AES
,您应该选择 AES-256 GCM
,因为它提供经过身份验证的加密,确保密文不会在收件人不知情的情况下被篡改。
AES-GCM
使用 32 位计数器运行,因此不幸的是,使用相同的密钥、随机数 (IV
) 对,您只能安全地加密 ~ 64GB
数据 (2^39-256 bits
).
如果您想使用更安全的密码,我推荐 XSalsa20
或 XChaCha20
,它们提供 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 位密钥。
根据应用程序开发人员的文档,AES_128 和 AES_256 受 api 支持26. https://developer.android.com/reference/javax/crypto/Cipher。例如,现在我正在使用 AES(GCM 模式) 和 128 位密钥。带 128 位密钥的 AES 和 AES_128 有什么区别?
使用 128-bit
键的 AES
和 AES_128
没有区别。
正如您在链接的文档中看到的那样,在 API 26
之前存在一种 AES 原语,具有各种填充 options/modes 操作。
为了使事情更简单,在 API 26+
中现在有两个原语来消除 AES
与确定的 128-bit
或 256-bit
键的用法的歧义。
如果您使用 AES
,您应该选择 AES-256 GCM
,因为它提供经过身份验证的加密,确保密文不会在收件人不知情的情况下被篡改。
AES-GCM
使用 32 位计数器运行,因此不幸的是,使用相同的密钥、随机数 (IV
) 对,您只能安全地加密 ~ 64GB
数据 (2^39-256 bits
).
如果您想使用更安全的密码,我推荐 XSalsa20
或 XChaCha20
,它们提供 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 位密钥。