在使用 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 |
|
| 十六进制密钥 |
UTF-8 |
|
| 明文字符串,常用 |
Base64 |
|
| Base64 编码密钥 |
Latin1 |
|
| 低频使用,单字节编码需求 |
注意事项:
- 密钥长度:
AES 加密算法支持的密钥长度为 128 位、192 位、256 位。若密钥长度不符合要求,需要进行截取或补齐。 - 一致性:
加密和解密时,密钥的格式和内容必须一致,否则会导致解密失败。 - 不适用
parse()
的场景:
如果密钥本身已经是CryptoJS.lib.WordArray
类型,则无需调用parse()
,可直接使用。