CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?
前言:这里只说js用的CryptoJS库里的相关内容,只用js来进行代码操作和讲解。
这里网上相关的帖子很少,不得已问了很长时间AI
想引用CryptoJS库情况分两种,一种是html引用,另一种是在Nodejs里引用。
一、引用CryptoJS库
1.在html里引用就用script标签里放CryptoJS的cdn即可
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
2.在Nodejs里使用就用下面的代码,当然,你用之前得先用cmd把库下载到本地,具体步骤网上查询。
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)
let key = CryptoJS.enc.Utf8.parse('f5d965df75336270');
console.log(key); // 输出的会是一个字节数组,包含字符对应的字节值
打印出就是下面截图这样
三、WordArray储存的解密结果如何转换不同的编码格式
上面已经知道了,解密结果储存在WordArray对象里,我们可以将解密结果转换为不同的编码格式,比如 Base64, Hex, 或者 字节数组 等。
// 假设你已经有了加密的密文和相应的解密配置
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
:直接获取字节数据(以字节数组的形式)。