在使用 CryptoJS 时,密钥可以采用多种格式序列化。以下是常见的几种格式及其适用场景:


1. Hex 格式

适用场景:密钥以十六进制字符串表示。

示例:
const keyHex = "9ca5deaa03b4a1fd41d16aa7c1f65b4b"; // 十六进制密钥
const key = CryptoJS.enc.Hex.parse(keyHex); // 转为 CryptoJS 的 WordArray 格式

2. UTF-8 格式

适用场景:密钥以字符串形式提供,如明文字符串。

示例:
const keyUtf8 = "my_secret_key_16"; // 明文字符串
const key = CryptoJS.enc.Utf8.parse(keyUtf8); // 转为 CryptoJS 的 WordArray 格式

3. Base64 格式

适用场景:密钥以 Base64 编码字符串表示,常用于某些加密协议或 API。

示例:
const keyBase64 = "nKXeqgO0of1B0WqnwfZbSw=="; // Base64 编码密钥
const key = CryptoJS.enc.Base64.parse(keyBase64); // 转为 CryptoJS 的 WordArray 格式

4. Latin1(ISO/IEC 8859-1)格式

适用场景:密钥以单字节字符(Latin1)编码表示,不常用。

示例:
const keyLatin1 = "latin1keystring"; // Latin1 字符串
const key = CryptoJS.enc.Latin1.parse(keyLatin1); // 转为 CryptoJS 的 WordArray 格式

格式对比表

格式

转换方法

示例密钥

适用场景

Hex

CryptoJS.enc.Hex.parse()

"9ca5deaa03b4a1fd41d16aa7c1f65b4b"

十六进制密钥

UTF-8

CryptoJS.enc.Utf8.parse()

"my_secret_key_16"

明文字符串,常用

Base64

CryptoJS.enc.Base64.parse()

"nKXeqgO0of1B0WqnwfZbSw=="

Base64 编码密钥

Latin1

CryptoJS.enc.Latin1.parse()

"latin1keystring"

低频使用,单字节编码需求


注意事项:

  1. 密钥长度
    AES 加密算法支持的密钥长度为 128 位、192 位、256 位。若密钥长度不符合要求,需要进行截取或补齐。
  2. 一致性
    加密和解密时,密钥的格式和内容必须一致,否则会导致解密失败。
  3. 不适用 parse() 的场景
    如果密钥本身已经是 CryptoJS.lib.WordArray 类型,则无需调用 parse(),可直接使用。