【问题标题】:What is the difference between cipher algorithms AES and AES_128密码算法AES和AES_128有什么区别
【发布时间】:2020-01-14 01:32:48
【问题描述】:

根据应用开发者的文档 AES_128AES_256 从 api 26 开始支持。https://developer.android.com/reference/javax/crypto/Cipher。例如,现在我使用 128 位密钥的 AES(GCM 模式)。 AES with 128 bit key 和 AES_128 有什么区别?

【问题讨论】:

    标签: android encryption encryption-symmetric


    【解决方案1】:

    带有128-bit 键的AESAES_128 之间没有区别。

    正如您在链接的文档中看到的那样,在 API 26 之前存在一个用于 AES 的原语,具有各种填充选项/操作模式。

    为了让事情更简单,在API 26+ 中现在有两个原语可以通过明确的128-bit256-bit 键来消除AES 的用法的歧义。

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

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

    如果您想使用更安全的密码,我推荐XSalsa20XChaCha20,它们提供192-bit 随机数大小,有效地允许使用相同的密钥对几乎“无限”数量的数据进行加密, nonce 对。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-11-02
        • 2020-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 2014-12-10
        • 2016-02-21
        相关资源
        最近更新 更多