CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?

**前言:**这里只说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 库的核心数据类型之一,它的结构有两个属性:

  1. words :这是一个数组,包含了数据的字节值。每个 word 是一个 32 位的整数(4 个字节)。所以,words 数组实际上代表了所有字节数据的集合。
  2. 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:直接获取字节数据(以字节数组的形式)。
相关推荐
lpfasd1232 小时前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
Data analyse4564 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai5 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记5 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁6 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu6 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!6 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格6 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人6 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid6 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet