V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
AX5N
V2EX  ›  问与答

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

  •  
  •   AX5N · 2019-07-25 04:38:03 +08:00 · 1422 次点击
    这是一个创建于 1980 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不会 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()变成数值的,我想看到具体数值应该怎么弄。

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

    第 1 条附言  ·  2019-07-25 06:41:05 +08:00
    大手子门可以帮忙看看 http://baduk.mgame.com/
    大概今天晚上才会回复了。
    第 2 条附言  ·  2019-07-25 14:29:34 +08:00
    问题 1,解决,是 b2a_hex 没错,并且也找到验证办法了。
    问题 2,虽然在源码里找到 cbc 和 pkcs7 关键字,但也不能肯定,但好在后来验证对了,确实是 cbc 和 pkcs7。
    (一开始抄 js 结果的时候不知道哪里抄错了,后来又去重新去 js 跟进了下,发现其实跟 py 结果是一样的-_-)
    问题 3,虽然跟进的时候可以看到过程中的变量,但感觉还是比较麻烦。

    总的来说,基本都解决了,前面搞不定主要还是抄错了,误以为自己弄错了。
    4 条回复    2019-07-25 13:22:15 +08:00
    linde
        1
    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
        2
    ysc3839  
       2019-07-25 05:23:34 +08:00 via Android
    1. https://github.com/brix/crypto-js/blob/8e6d15bf2e26d6ff0af5277df2604ca12b60a718/src/core.js#L356-L380
    3. 大概是实现了 toString,在调用 val 的时候自动调用了 toString 转成了字符串。
    其他的我也不懂。
    AX5N
        3
    AX5N  
    OP
       2019-07-25 06:36:53 +08:00
    跟进了下 CryptoJS.AES.encrypt 函数,搜得出 CBC 和 Pkcs7 关键字,感觉大概率就是这两个了,但是仍然加密不出正确的结果,不清楚到底是哪里出错了。


    @ysc3839 python 没有 >>>,搜了下,感觉模拟不出这功能...GG
    @linde 现在没办法确定 CryptoJS.enc.Hex.parse() 是不是对的,感觉就算用排列组合的方式去试,也不太好试。
    ysc3839
        4
    ysc3839  
       2019-07-25 13:22:15 +08:00 via Android
    @AX5N >>> 应该是无符号右移吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5272 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:56 · PVG 13:56 · LAX 21:56 · JFK 00:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.