【问题标题】:How to add HMAC to CryptoJS AES encryption?如何将 HMAC 添加到 CryptoJS AES 加密?
【发布时间】:2015-03-15 23:13:37
【问题描述】:

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

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

我搜索了教程和其他问题,但没有找到。

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

【问题讨论】:

    标签: javascript encryption cryptography aes cryptojs


    【解决方案1】:

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

    以下是如何使用它为加密数据生成 MAC 的示例。这里的想法是 key 对象是您和受信任方之间用于验证加密数据完整性的共享密钥。

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

    有几件事要记住。

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

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

    我认为您应该设置为验证一些数据!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      相关资源
      最近更新 更多