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

2020-04-27 16:05:59 +08:00
 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 ?

3998 次点击
所在节点    程序员
9 条回复
rmb1222
2020-04-27 16:48:23 +08:00
zxyroy
2020-04-27 17:32:06 +08:00
随机生成的话下次要怎么解密?
LeeSeoung
2020-04-27 17:34:31 +08:00
iv 为空随机生成,解密的时候密文要跟 iv 一起提供。
jiejiss
2020-04-27 17:41:36 +08:00
@zxyroy #2 https://github.com/gwjjeff/cryptojs/blob/master/lib/AES.js#L126 iv 为空情况下(返回的密文的)前 16 字节就是随机生成的 iv

复读了一下 #1
zxyroy
2020-04-27 18:04:06 +08:00
@jiejiss 我看了 110 行之后太过震惊,就没往下看 126 了。下次看完再回复
yukiball
2020-04-27 18:41:15 +08:00
长知识了
jiejiss
2020-07-01 23:12:29 +08:00
你本可以直接 String iv = encrypted.substring(0, 16); 的,不需要调用 JS 解密
youngs
2020-07-02 14:54:55 +08:00
@jiejiss 试过,当时我记得不太行,会丢东西,所以换了方式
jiejiss
2020-07-02 22:06:45 +08:00
@youngs #8 有点奇怪哎,是不是你把 substring 剩下的从 index = 16 开始的密文丢进去解密了……我感觉可能尽管 iv 是 substring(0, 16),但解密还是得从 index = 0 开始解

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

https://www.v2ex.com/t/666649

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

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

© 2021 V2EX