快疯了! CryptoJS AES CBC 加密为啥可以吧 iv 指定为''?

2020 年 4 月 27 日
 youngs
var data = word;
var key = CryptoJS.enc.Utf8.parse('1111111111111111');
var iv = CryptoJS.enc.Utf8.parse('');
//加密
var encrypted = CryptoJS.AES.encrypt(data, key, {iv: iv, mode: CryptoJS.mode.CBC });

这么搞 Java 没办法解密啊。。。难倒 CryptoJS 有默认的 iv ?

4599 次点击
所在节点    程序员
9 条回复
rmb1222
2020 年 4 月 27 日
zxyroy
2020 年 4 月 27 日
随机生成的话下次要怎么解密?
LeeSeoung
2020 年 4 月 27 日
iv 为空随机生成,解密的时候密文要跟 iv 一起提供。
jiejiss
2020 年 4 月 27 日
@zxyroy #2 https://github.com/gwjjeff/cryptojs/blob/master/lib/AES.js#L126 iv 为空情况下(返回的密文的)前 16 字节就是随机生成的 iv

复读了一下 #1
zxyroy
2020 年 4 月 27 日
@jiejiss 我看了 110 行之后太过震惊,就没往下看 126 了。下次看完再回复
yukiball
2020 年 4 月 27 日
长知识了
jiejiss
2020 年 7 月 1 日
你本可以直接 String iv = encrypted.substring(0, 16); 的,不需要调用 JS 解密
youngs
2020 年 7 月 2 日
@jiejiss 试过,当时我记得不太行,会丢东西,所以换了方式
jiejiss
2020 年 7 月 2 日
@youngs #8 有点奇怪哎,是不是你把 substring 剩下的从 index = 16 开始的密文丢进去解密了……我感觉可能尽管 iv 是 substring(0, 16),但解密还是得从 index = 0 开始解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/666649

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX