crypto-js 支持指定 AES 加密算法的变种。AES 有多种加密模式,例如 ECB、CBC、CFB、OFB 等。默认情况下,crypto-js 使用 AES 算法的 CBC 模式,并且需要提供一个初始向量(IV)。如果需要更改加密模式或设置不同的选项,可以通过 CryptoJS.AES.encrypt 和 CryptoJS.AES.decrypt 函数来实现。
示例:指定 AES 加密模式
const CryptoJS = require('crypto-js');
// 密钥和数据
const secretKey = 'my-secret-key';
const iv = CryptoJS.enc.Utf8.parse('1234567890123456'); // 16 字节 IV
const data = 'Hello, this is a secret message!';
// 使用 AES-CBC 加密(指定模式和 IV)
const encryptedData = CryptoJS.AES.encrypt(data, secretKey, { iv: iv }).toString();
console.log('Encrypted Data:', encryptedData);
// 解密
const bytes = CryptoJS.AES.decrypt(encryptedData, secretKey, { iv: iv });
const decryptedData = bytes.toString(CryptoJS.enc.Utf8);
console.log('Decrypted Data:', decryptedData);
说明:
iv: iv:iv(初始向量)是 AES 加密所必需的,尤其是当使用CBC模式时。它通常是一个 16 字节的字符串。- 默认模式是
CBC,但是你可以指定其他模式,如ECB、CFB等。
指定其他 AES 模式
你可以通过更改 options 对象中的 mode 来使用其他模式。例如,使用 ECB 模式:
const encryptedData = CryptoJS.AES.encrypt(data, secretKey, {
mode: CryptoJS.mode.ECB
}).toString();
console.log('Encrypted Data (ECB):', encryptedData);
// 解密
const bytes = CryptoJS.AES.decrypt(encryptedData, secretKey, {
mode: CryptoJS.mode.ECB
});
const decryptedData = bytes.toString(CryptoJS.enc.Utf8);
console.log('Decrypted Data (ECB):', decryptedData);
常用的 AES 模式
CryptoJS.mode.CBC:默认的模式,使用 IV(初始向量)。CryptoJS.mode.ECB:电子密码本模式,不需要 IV,但不太安全,建议谨慎使用。CryptoJS.mode.CFB:加密反馈模式。CryptoJS.mode.OFB:输出反馈模式。
选择适当的加密模式
- CBC(Cipher Block Chaining):最常用的 AES 模式,通常用于加密较长的数据。它需要 IV(初始化向量),并且每个数据块的加密依赖于前一个数据块。
- ECB(Electronic Codebook):每个数据块独立加密,不需要 IV,但容易受到模式分析攻击,因此不推荐在安全要求较高的场合使用。
- CFB 和 OFB:这些模式在某些场景下使用,适用于流加密,但通常不如 CBC 安全。
根据你的应用需求选择加密模式及其配置。
前端工程师、程序员

浙公网安备 33010602011771号