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

标签 javascript encryption cryptography aes cryptojs

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

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

我四处寻找教程和其他问题,但没有找到。

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

最佳答案

cryptoJS 提供的 HMAC 的想法是让开发者向它传递加密数据和 key ,以便它在另一端吐出 MAC。

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

    //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 Drive 浏览器文件加密服务。

关于javascript - 如何将 HMAC 添加到 CryptoJS AES 加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29067371/

相关文章:

使用 CBC 和 PKCS7Padding 的 Java AES 加密

php - 在 mysql 上使用 AES 加密,最短 URL

c# - 在 Bouncy CaSTLe 中使用正确的加密服务提供商更新 x509Certificate2

javascript - 如何在 Javascript 中停止并更改 CSS 关键帧?

javascript - 带有重定向的 Angular 2 AuthGuard 服务?

c - 在C中解密密码

python - AES 256 字节以外(8 或 16)

javascript - JS 主应用程序使用路由来显示对话框等?

javascript - 如何在node.js中触发firebase http函数?

python - rsa算法的python包是什么