**前言:**这里只说js用的CryptoJS库里的相关内容,只用js来进行代码操作和讲解。
这里网上相关的帖子很少,不得已问了很长时间AI
想引用CryptoJS库情况分两种,一种是html引用,另一种是在Nodejs里引用。
一、引用CryptoJS库
1.在html里引用就用script标签里放CryptoJS的cdn即可
html
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
2.在Nodejs里使用就用下面的代码,当然,你用之前得先用cmd把库下载到本地,具体步骤网上查询。
javascript
const CryptoJS = require('crypto-js');
二、WordArray对象
什么是WordArray对象呢,我具体问了下GPT,下面是具体解释:
在 CryptoJS 中,所有的加密操作和字节数组都由 WordArray 类型表示。CryptoJS 的加密和解密过程本质上都在处理字节数据(WordArray),所以无论你使用的是哪种加密算法,解密后的结果仍然是 字节数组 (WordArray 对象)。所有通过 CryptoJS 加密的算法(如 AES、DES、Triple DES、RC4、Rabbit 等)都返回一个 WordArray 对象,它们的解密过程同样返回一个 WordArray 类型的数据。因此,你可以对这些算法的解密结果使用相同的 .toString() 方法来获取不同的编码格式。
另外,WordArray对象还有个重要作用,即解密过程中的数据都保存在 WordArray 类型里。
在解密过程中,解密的结果通常是一个 WordArray 对象,它包含了解密后的字节数据。这个 WordArray 对象可以通过 .toString() 方法转换为其他格式的字符串(如 UTF-8、Hex、Base64 等)
无论你使用 CryptoJS 执行哪种加密或解密算法(例如 AES、DES、Triple DES、RC4 等),它们都会以 WordArray 类型 存储数据。
WordArray 类型的基本概念
CryptoJS 中的 WordArray 是一种 字节数组 的表示,它被用于存储加密或解密过程中的 二进制数据 (比如密文、明文、密钥、初始化向量等)。WordArray 是 CryptoJS 库的核心数据类型之一,它的结构有两个属性:
words:这是一个数组,包含了数据的字节值。每个word是一个 32 位的整数(4 个字节)。所以,words数组实际上代表了所有字节数据的集合。sigBytes:这个属性表示字节数据的总字节数(例如:16 字节、32 字节等)。它记录的是有效字节的长度。
想打印WordArray类型的变量也简单,下面的代码就可以打印(不要忘了先引用CryptoJS)
javascript
let key = CryptoJS.enc.Utf8.parse('f5d965df75336270');
console.log(key); // 输出的会是一个字节数组,包含字符对应的字节值
打印出就是下面截图这样

三、WordArray储存的解密结果如何转换不同的编码格式
上面已经知道了,解密结果储存在WordArray对象里 ,我们可以将解密结果转换为不同的编码格式,比如 Base64 , Hex , 或者 字节数组 等。
javascript
// 假设你已经有了加密的密文和相应的解密配置
let key = CryptoJS.enc.Utf8.parse('f5d965df75336270');
let iv = CryptoJS.enc.Utf8.parse('97b60394abc2fbe1');
let encryptedData = result; // 假设 result 是 Base64 编码的密文
// 解密
let decryptedData = CryptoJS.AES.decrypt(encryptedData, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.NoPadding
});
// 转换为不同的格式
let plaintextUtf8 = decryptedData.toString(CryptoJS.enc.Utf8); // 明文字符串
let decryptedHex = decryptedData.toString(CryptoJS.enc.Hex); // 十六进制字符串
let decryptedBase64 = decryptedData.toString(CryptoJS.enc.Base64); // Base64 字符串
let decryptedLatin1 = decryptedData.toString(CryptoJS.enc.Latin1); // Latin1 编码字符串
let decryptedBytes = decryptedData.words; // 字节数组
// 输出不同的格式
console.log('UTF-8:', plaintextUtf8);
console.log('Hex:', decryptedHex);
console.log('Base64:', decryptedBase64);
console.log('Latin1:', decryptedLatin1);
console.log('Bytes:', decryptedBytes);
总结:
.toString(CryptoJS.enc.Utf8):将字节数组转换为 UTF-8 编码的字符串,这个一般最常用。.toString(CryptoJS.enc.Hex):将字节数组转换为十六进制字符串。.toString(CryptoJS.enc.Base64):将字节数组转换为 Base64 编码的字符串。.toString(CryptoJS.enc.Latin1):将字节数组转换为 Latin1 编码的字符串。.words:直接获取字节数据(以字节数组的形式)。