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

devtools/2025/3/1 8:55:14/

前言:这里只说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把库下载到本地,具体步骤网上查询。

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 是一种 字节数组 的表示,它被用于存储加密或解密过程中的 二进制数据(比如密文、明文、密钥、初始化向量等)。WordArrayCryptoJS 库的核心数据类型之一,它的结构有两个属性:

  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:直接获取字节数据(以字节数组的形式)。

http://www.ppmy.cn/devtools/163569.html

相关文章

Basler acA1920-40gc

软件 下载Basler软件 | Basler AG 说明书 ace acA1920-40gc | GigE相机 | Basler | Basler AG 支持PTP同步 在使用 Basler acA1920-40gc 相机和 Polyn View 软件时&#xff0c;确认 PTP&#xff08;Precision Time Protocol&#xff09;同步是否成功&#xff0c;可以通过…

【Pandas】pandas Series ffill

Pandas2.2 Series Computations descriptive stats 方法描述Series.backfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值&#xff08;NaN&#xff09;的方法Series.bfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值&#xff08;NaN&#xff09;的…

算法day3 dfs搜索2题

一 奇怪的电梯 我们来分析题目 这个题目有很多层电梯 我们处于这个电梯的时候&#xff0c;我们要考虑&#xff0c;我们在这个电梯里面是要上去还是下去&#xff0c;有两个选择&#xff0c;上去和下来&#xff0c;我们要对于这个上去和下去进行深度搜索&#xff0c;找出那个最…

日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(14):(1)普通(ふつう)形 :变形练习|(2)と思います:认为 猜测

日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(14):(1)普通(ふつう)形 :变形练习|(2)と思います:认为 & 猜测  1、前言(1)情况说明(2)工程师的信仰2、知识点(1)普通(ふつう)形:Plain style:简体(2)と思います:认为 & 猜测3、单词(1…

智慧校园平台在学生学习与生活中的应用

随着科技的发展&#xff0c;教育领域也在不断探索新的模式与方法。智慧校园平台作为教育信息化的重要组成部分&#xff0c;正逐渐成为推动教育改革、提高教学质量的关键工具。 一.智慧校园平台概述 智慧校园平台是一种集成了教学管理、资源服务、数据分析等多功能于一体的数字…

el-table修改表格颜色

文章目录 一、el-table属性修改表格颜色1.1、header-row-class-name修改表头行颜色1.2、header-row-style修改表头样式1.3、row-class-name修改行颜色 二、el-table-column属性修改表格颜色2.1、class-name修改整列的颜色2.2、label-class-name修改列标题颜色 本文讲解vue修改e…

Angular从入门到精通教程篇章

Angular 是一个强大的前端框架&#xff0c;适合构建复杂的企业级应用。为了帮助你从入门到精通 Angular&#xff0c;以下是详细的学习路径和教程篇章。 篇章一&#xff1a;入门篇 (1) 了解 Angular 什么是 Angular&#xff1f; Angular 是一个基于 TypeScript 的前端框架&am…

Ubuntu20.04安装Isaac sim/ Isaac lab

2025年之后omniverse好像不能直接装Isaac sim了&#xff0c;要跳转到官网链接。 Isaac lab要在Isaac sim安装之后才能安装 Ubuntu20.04安装Isaac sim/ Isaac lab Isaac sim安装Isaac lab安装 Isaac sim安装 找到官网 Isaac sim官方文档 下载下来解压到本地文件夹&#xff0c…