如何使用CryptoJS 实现 AES 加解密

Web开发   2025-07-14 14:13   33   0  

CryptoJS 是一个基于 JavaScript 的加密库,它支持 AES、DES 等多种常见的加密算法。


1. 引入 CryptoJS 库

首先,确保你已经安装并引入了 CryptoJS 库。在 Node.js 环境中,可以使用 npm 安装 CryptoJS:

npm install crypto-js

在浏览器环境中,你可以直接通过 CDN 引入 CryptoJS:

<script src="https://cdn.jsdelivr.net/npm/crypto-js@3.1.9-1"></script>

2. AES 解密基本原理

AES 是一种对称加密算法,这意味着加密和解密使用相同的密钥。在解密过程中,我们需要以下几个关键要素:

    a.密钥(key):用于加密和解密的密码。

    b.初始化向量(IV):AES 算法需要一个初始化向量,它通常与密钥结合使用。初始化向量的作用是增强加密的安全性。

    c.加密模式(mode):AES 支持不同的加密模式,常见的有 ECB、CBC 等。在这个示例中,我们使用的是 ECB 模式。

    d.填充模式(padding):由于 AES 是块加密算法,输入数据必须是块大小的整数倍。为了处理这个问题,我们使用 PKCS7 填充模式。


3. AES 解密的实现

我们将解密一个加密的数据。以下是解密过程的具体代码:

// 定义密钥(密钥和初始化向量必须相同或符合要求)
var j = "DXZWdxUZ5jgsUFPF";
var z = CryptoJS.enc.Utf8.parse(j);

// 解密函数
function dec123(data) {
    // 解密操作,使用 AES 算法
    var e = CryptoJS.AES.decrypt(data, z, {
        iv: CryptoJS.enc.Utf8.parse(j.substr(0, 16)), // 使用密钥的前16个字符作为初始化向量
        mode: CryptoJS.mode.ECB, // 使用 ECB 模式
        padding: CryptoJS.pad.Pkcs7 // 使用 PKCS7 填充
    });
    
    // 将解密后的数据转换为 UTF-8 字符串并解析为 JSON 对象
    return JSON.parse(e.toString(CryptoJS.enc.Utf8));
}

代码解析:

    1. 密钥与初始化向量(IV):

            1.1  j = "DXZWdxUZ5jgsUFPF":这是我们用于加密和解密的密钥。它是一个字符串,并在后续的操作中通过 CryptoJS.enc.Utf8.parse(j) 转换为 CryptoJS 支持的格式。

  •     1.2 iv: CryptoJS.enc.Utf8.parse(j.substr(0, 16)):初始化向量是从密钥的前 16 个字符中提取的。AES 算法要求初始化向量的长度与块大小匹配(通常是 16 字节)。

    2.解密操作:

           2.1  CryptoJS.AES.decrypt 是解密函数,接受三个参数:要解密的数据、密钥和配置对象。配置对象中,我们指定了加密模式为 ECB,以及使用 PKCS7 填充方式。

    3.返回解密后的 JSON 数据:

        3.1 e.toString(CryptoJS.enc.Utf8):解密后的数据是一个字节数组,需要转换成 UTF-8 格式的字符串。

         3.2  JSON.parse():将解密后的字符串解析为 JSON 对象,以便进一步处理。

4. 使用示例

    假设我们有一个经过 AES 加密的数据字符串 "encryptedData",我们可以通过上述的 dec123 函数来解密这个数据:

// 假设加密后的数据字符串
var encryptedData = "U2FsdGVkX1+VdQ7tGZg59PwnD98tb2ltk6Dld8KQlD4="; // 示例加密数据

// 解密数据
var decryptedData = dec123(encryptedData);

// 输出解密后的数据
console.log(decryptedData);

输出示例:

{
  "username": "user123",
  "email": "user@example.com",
  "role": "admin"
}

在这个例子中,dec123 函数成功解密了加密数据,并将其转换为一个 JSON 对象

下一篇
没有了