python版的TripleDES (DES3) padding

2019-12-04  本文已影响0人  萌木盖

起因

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

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

言归正传:分析

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

这里麻烦的有两点:

先看代码后看解释

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

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字节
所有现在这样就行,解决!手工!

上一篇下一篇

猜你喜欢

热点阅读