美文网首页
python版的TripleDES (DES3) padding

python版的TripleDES (DES3) padding

作者: 萌木盖 | 来源:发表于2019-12-04 10:43 被阅读0次

    起因

    抓包某网站,发现数据是加密的。

    网站的json数据 然后找到加密具体代码为:
    加密代码
    那么加密代码我是怎么找到的呢?
    image.png
    把代码往右拽拽就能看到,有中文。hhhh

    言归正传:分析

    你一百度解密方法TripleDES就会知道这个方法是 CryptoJS 加密库里的。
    然后再去搜python版的CryptoJS,就会各种让你装Cryptopycryptodomepycryptodomex、之类的。然而并不用。
    这里使用一个包叫:pyDes

    这里麻烦的有两点:
    • 不管是python的pycrypto中的DES3或者pyDes的triple_des都没有PKCS7这种加密方式。
    • 密钥很麻烦,放上去长度不对。

    先看代码后看解释

    我图上的代码改完就是如下:

    from pyDes import *
    import pyDes
    import base64
    def toHex(txt):
        return ''.join(["%02x" % x for x in txt]).strip()
    
    def do_3des():
    
      mi="秘文太长不放了"
      # 我这里密文是经过base64加密的,需要解密,你的密文如果没经过base64加密,不需要这一步
      result = base64.b64decode(mi) 
    
      k = triple_des(b"fad6dd67a2422fd699edc0de", ECB, pad=None, padmode=PAD_PKCS5)
      d = k.decrypt(result)
      print(result)
      print ("Decrypted: %r" % d)
      print(toHex(d))
    
    do_3des()
    
    image.png

    这里的密钥是怎么出来的?

    image.png

    打断点调试页面,然后调用该函数就知道了。

    注意

    密钥长度

    然后细心的就会发现:截图里的和代码里的不太一样,截图里的长。
    那是因为密钥只支持16位24位的,
    md5生成的太长了,32位呢。删掉后面8个就是24位了。
    那么如果不够24位呢?
    补上0就可以了,但不是直接加0,这个0指的是ASCII码值0 ,'\0'
    比如:

    k = triple_des(b"test12345678901234\0\0\0\0\0\0", ECB, pad=None, padmode=PAD_PKCS5)
    
    PAD_PKCS5和PAD_PKCS7

    发现我用的还是PAD_PKCS5,
    根据这篇回答的解释是:
    PKCS#5 可以说是 PKCS#7的一个子集。 前者是针对8字节块padding,后者把padding的块大小放宽到255字节
    所有现在这样就行,解决!手工!

    相关文章

      网友评论

          本文标题:python版的TripleDES (DES3) padding

          本文链接:https://www.haomeiwen.com/subject/tpukgctx.html