CryptoJS 加密结果每次都不一样,怎么回事?

皇甫昕彤 阅读 47

我用 CryptoJS 做 AES 加密,明明传入相同的 key 和明文,但每次加密出来的结果都不同,这让我没法做一致性校验。是不是哪里配置错了?

我用的是默认的 AES 加密方式,代码大概长这样:

const key = CryptoJS.enc.Utf8.parse('1234567890123456');
const encrypted = CryptoJS.AES.encrypt('hello', key);
console.log(encrypted.toString());

查了文档说默认会加随机 IV,但我不想要这个行为,怎么关掉它?

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
设计师欣胜
问题是 CryptoJS 默认用了 CBC 模式,每次自动生成随机 IV。要固定结果,有两个办法:

一是手动指定固定的 IV:

const key = CryptoJS.enc.Utf8.parse('1234567890123456');
const iv = CryptoJS.enc.Utf8.parse('1234567890123456'); // 固定 IV
const encrypted = CryptoJS.AES.encrypt('hello', key, { iv: iv });
console.log(encrypted.toString());


二是直接用 ECB 模式(不需要 IV):

const key = CryptoJS.enc.Utf8.parse('1234567890123456');
const encrypted = CryptoJS.AES.encrypt('hello', key, { mode: CryptoJS.mode.ECB });
console.log(encrypted.toString());


ECB 模式不需要 IV,所以结果肯定一致,但安全性比 CBC 差一些。看你的场景选一个吧。
点赞
2026-03-16 21:00