请教下这段 AES 加密的过程怎么在 Python 里模拟

2019-07-25 04:38:03 +08:00
 AX5N

不会 javascript,只能拿来问了。 简化了下代码,大概如下

function chkSubmit() {

	var key = CryptoJS.enc.Hex.parse(setcjhkey(1));
	var iv  = CryptoJS.enc.Hex.parse(setcjhkey(2));

	var mgid = $('input[name=mgid_enc]').val();
	var mgpw = $('input[name=mgpwd_enc]').val();

	var uidencdata = CryptoJS.AES.encrypt(mgid, key, { iv: iv });
	var upwdencdata = CryptoJS.AES.encrypt(mgpw, key, { iv: iv });

	$('#login1').val(uidencdata);
	$('#login2').val(upwdencdata);
}

用 chrome 来调试的,但变量似乎是各种“对象”,也不知道怎么把具体值给取出来。

问题 1,CryptoJS.enc.Hex.parse(),这个是啥?使用了这个方法后,字符串变成了一个长度 4 的数组,推测对应 python 里的b2a_hex,也不知道是不是,反正结果看上去也看不太出-_-

问题 2,CryptoJS.AES.encrypt(),这个加密模式,数据块长度,填充方式完全看不出来,就算断点进去,翻了半天好像也没看出来。如果没有明说就代表默认的话,那默认是什么!?

问题 3,在 chrome 里 uidencdataupwdencdata 都显示的是对象,是怎么用.val()变成数值的,我想看到具体数值应该怎么弄。

总之尝试了半天,都得不出和网站加密一样的结果。

1411 次点击
所在节点    问与答
4 条回复
linde
2019-07-25 04:59:07 +08:00
CryptoJS supports the following modes:

>CBC (the default)
>CFB
>CTR
>OFB
>ECB

And CryptoJS supports the following padding schemes:

>Pkcs7 (the default)
>Iso97971
>AnsiX923
>Iso10126
>ZeroPadding
>NoPadding
-------
有 mode 和 padding 接下来应该就好办了。
ysc3839
2019-07-25 05:23:34 +08:00
1. https://github.com/brix/crypto-js/blob/8e6d15bf2e26d6ff0af5277df2604ca12b60a718/src/core.js#L356-L380
3. 大概是实现了 toString,在调用 val 的时候自动调用了 toString 转成了字符串。
其他的我也不懂。
AX5N
2019-07-25 06:36:53 +08:00
跟进了下 CryptoJS.AES.encrypt 函数,搜得出 CBC 和 Pkcs7 关键字,感觉大概率就是这两个了,但是仍然加密不出正确的结果,不清楚到底是哪里出错了。


@ysc3839 python 没有 >>>,搜了下,感觉模拟不出这功能...GG
@linde 现在没办法确定 CryptoJS.enc.Hex.parse() 是不是对的,感觉就算用排列组合的方式去试,也不太好试。
ysc3839
2019-07-25 13:22:15 +08:00
@AX5N >>> 应该是无符号右移吧。

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

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

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

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

© 2021 V2EX