当前位置: 首页 > article >正文

前端算法库CryptoJS 有哪些格式转换

CryptoJS 是一个常用的前端加密库,支持多种数据格式的转换和编码操作。以下是其核心的 格式转换方法 及使用场景:


一、CryptoJS 支持的核心编码格式

CryptoJS 通过 enc 模块提供以下编码器:

编码格式描述典型应用场景
Hex十六进制字符串哈希值展示、二进制数据可视化
Base64Base64 编码字符串传输二进制数据(如图片、文件)
Utf8UTF-8 字符串处理普通文本输入/输出
Latin1ISO-8859-1 字符串处理旧系统兼容的文本
Utf16UTF-16 字符串处理特殊字符集
ArrayBufferJavaScript ArrayBuffer与浏览器原生 API 交互

二、基础格式转换方法

1. 字符串 ↔ 字节数组(WordArray)

CryptoJS 的核心数据结构是 WordArray,所有加密操作均基于此。

// 字符串 → WordArray
const wordArray = CryptoJS.enc.Utf8.parse("Hello World");

// WordArray → 字符串
const str = CryptoJS.enc.Utf8.stringify(wordArray);
2. Hex 编码转换
// WordArray → Hex字符串
const hexStr = CryptoJS.enc.Hex.stringify(wordArray);

// Hex字符串 → WordArray
const hexToWord = CryptoJS.enc.Hex.parse("48656c6c6f20576f726c64");
3. Base64 编码转换
// WordArray → Base64
const base64Str = CryptoJS.enc.Base64.stringify(wordArray);

// Base64 → WordArray
const base64ToWord = CryptoJS.enc.Base64.parse("SGVsbG8gV29ybGQ=");
4. Latin1 编码转换
// WordArray → Latin1字符串
const latinStr = CryptoJS.enc.Latin1.stringify(wordArray);

// Latin1字符串 → WordArray
const latinToWord = CryptoJS.enc.Latin1.parse("Hello World");

三、高级格式转换场景

场景1:加密后的数据转换
// AES加密后转Base64
const encrypted = CryptoJS.AES.encrypt(
  "secret message", 
  "password123"
);
const base64Cipher = encrypted.toString(); // 默认Base64格式

// 从Base64解析密文
const ciphertext = CryptoJS.enc.Base64.parse(base64Cipher);
场景2:HMAC 签名转Hex
const signature = CryptoJS.HmacSHA256("data", "key");
const hexSignature = signature.toString(CryptoJS.enc.Hex);
场景3:处理ArrayBuffer
// ArrayBuffer → WordArray
const arrayBuffer = new Uint8Array([72, 101, 108, 108, 111]).buffer;
const wordArray = CryptoJS.lib.WordArray.create(arrayBuffer);

// WordArray → ArrayBuffer
const newBuffer = wordArrayToArrayBuffer(wordArray);

function wordArrayToArrayBuffer(wordArray) {
  const words = wordArray.words;
  const buffer = new ArrayBuffer(words.length * 4);
  new Uint32Array(buffer).set(words);
  return buffer;
}

四、编码转换对照表

操作类型方法示例
字符串 → 编码格式CryptoJS.enc.XX.parse(str)CryptoJS.enc.Utf8.parse("text")
编码格式 → 字符串CryptoJS.enc.XX.stringify(wordArray)CryptoJS.enc.Hex.stringify(words)
跨编码直接转换先转WordArray再转目标格式Base64 → Hex(见下方示例)

五、跨编码转换示例

示例1:Base64 → Hex
const base64Str = "SGVsbG8=";
const wordArray = CryptoJS.enc.Base64.parse(base64Str);
const hexStr = CryptoJS.enc.Hex.stringify(wordArray); // "48656c6c6f"
示例2:Hex → UTF-8字符串
const hexStr = "48656c6c6f20576f726c64";
const wordArray = CryptoJS.enc.Hex.parse(hexStr);
const utf8Str = CryptoJS.enc.Utf8.stringify(wordArray); // "Hello World"

六、注意事项

  1. 编码一致性:加解密时需确保编解码方式一致,否则会导致数据损坏

    // 错误示例:加密用Utf8,解密用Hex
    const encrypted = CryptoJS.AES.encrypt("data", "key"); // 默认Utf8
    const decrypted = CryptoJS.AES.decrypt(encrypted, "key", { 
      format: CryptoJS.format.Hex // 错误!应与加密时一致
    });
    
  2. 二进制安全Latin1 可能丢失信息,优先使用 Utf8Base64

  3. 性能优化:大文件转换建议使用 ArrayBuffer 分块处理


七、完整工具函数

/**
 * 通用编码转换工具
 * @param {string} input - 输入数据
 * @param {string} from - 源编码 (hex/base64/utf8/latin1)
 * @param {string} to - 目标编码 (hex/base64/utf8/latin1)
 */
function convertEncoding(input, from, to) {
  const parsers = {
    hex: CryptoJS.enc.Hex,
    base64: CryptoJS.enc.Base64,
    utf8: CryptoJS.enc.Utf8,
    latin1: CryptoJS.enc.Latin1
  };

  const wordArray = parsers[from].parse(input);
  return parsers[to].stringify(wordArray);
}

// 使用示例
const base64ToHex = convertEncoding("SGVsbG8=", "base64", "hex"); // "48656c6c6f"

通过掌握这些转换方法,可以灵活处理前端加密场景中的数据格式问题。


http://www.kler.cn/a/576471.html

相关文章:

  • 【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程
  • 2025年03月07日Github流行趋势
  • 【PostgreSQL】如何免密使用PostgreSQL数据库内置工具
  • vue3页面html导出word文档
  • android studio开发文档
  • HarmonyOS 应用程序包结构 (编译态)
  • 低代码平台的后端架构设计与核心技术解析
  • Spring面试问答
  • 鸿蒙生态日日新,夸克、顺丰速运、驾校一点通等多款应用功能更新
  • MC9S12单片机上电初始化过程及BOOTLOADER分析
  • 国自然面上项目|基于海量多模态影像深度学习的肝癌智能诊断研究|基金申请·25-03-07
  • 阿里云操作系统控制台——ECS操作与性能优化
  • 编写一个基于OpenSSL的SSL/TLS服务端(HTTPS)可运行的完整示例
  • 13.数据结构(软考)
  • Redis优化秒杀
  • 我的第一个CVE漏洞挖掘之旅
  • 可视化+图解:轻松搞定链表
  • C# CompareTo Compare 方法使用详解
  • 78.StringBuilder简单示例 C#例子 WPF例子
  • LeetCode hot 100—二叉树的最大深度