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

时间:2015-03-15 23:13:38

标签: javascript encryption cryptography aes cryptojs

CryptoJS的便利功能CryptoJS.AES.encrypt("some plaintext", "password")似乎无法进行任何身份验证。

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

我四处寻找教程和其他问题,但无法找到任何问题。

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

1 个答案:

答案 0 :(得分:2)

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的google驱动器的浏览器文件加密服务。