如何将 HMAC 添加到 CryptoJS AES 加密?

How to add HMAC to CryptoJS AES encryption?

CryptoJS 的便利函数 CryptoJS.AES.encrypt("some plaintext", "password") 似乎没有进行任何身份验证。

我看到 CryptoJS 提供了一个 HMAC class,但我对如何使用它来加密然后验证感到困惑。

我四处搜索教程和其他问题,但找不到。

如何使用上述 CryptoJS HMAC class 添加身份验证来验证 CryptoJS.AES.encrypt 生成的密文?

cryptoJS 提供的 HMAC 的想法是让开发者将加密数据和密钥传递给它,以便它在另一端。

下面是一个示例,说明如何使用它为加密数据生成 MAC。这里的想法是 key 对象是您和受信任方之间用来验证加密数据完整性的共享秘密。

    //Encrypt Data
    var encryptObject = CryptoJS.AES.encrypt(content, key, { iv: yourIV });

    //Calculate HMAC
    var HMAC = CryptoJS.HmacSHA256(encryptObject.toString(), key);

有几件事要记住。

  • 始终在解密前加密对象上计算HMAC。这可以防止任何对加密数据的操纵在解密后造成伤害。

  • 验证HMAC时确保数据encoding/format相同。例如,上面我使用了加密对象的 toString(),我这样做是因为 cryptoJS 自动将该对象序列化为密文。解密后,我计算了我收到的加密 blob 的二进制字符串上的 HMAC,以确保 HMAC 计算正确。

有了这个,我认为您应该设置为验证一些数据!

还有一个工作示例,您可以查看 http://meowcrypt.com/ 这是我在浏览器中为使用 cryptoJS 的 google 驱动器提供的文件加密服务。