美文网首页
Java AES cbc模式转Python 向量(iv)的问题及

Java AES cbc模式转Python 向量(iv)的问题及

作者: 朝朝朝朝朝落 | 来源:发表于2021-10-13 13:53 被阅读0次

App: beitalicaishi

在注册页面输入phone的时候, 抓到了一个包, 内容是该phone的信息, 请求中有一个参数parms


WX20211013-134447@2x.png

headers = {
    'beta.sessionid': '',
    'User-Agent': 'com.betawm.baw/7.28/169/Android/9/Pixel XL/BetaWM.BAW/HT74B0204170c6fcb511aa6d18a2/BetaWM.BAW',
    'Host': 'auth.betawm.com',
}

params = (
    ('parms', 'KWgtPsDNxAyUSCJlzEvkQm2l0gCOLrFuXYKMP4CwIA8='),#parms
    ('LoginSvcID', '4'),
)

response = requests.get('https://auth.betawm.com/AuthServer/GetUserInfo.aspx', headers=headers, params=params)
response.json()
Out[453]: 
{'InternalUserID': 869562,
 'UserId': 'Beta1065266',
 'UserName': '朝XXX落',
 'UserEmail': '',
 'UserCompany': 'Beta财富',
...}

反编译一顿search, 找到了加密位置:


WX20211013-135013.png
WX20211013-135144.png

用的是AES加密, CBC模式, 里面的iv转Python要这样操作一下:

# python3和java字节的取值范围不同:
# Python3: 0~256
# java:         -127~128
# java中key,iv等参数对应的类型是字节数组
iv=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
iv = bytes(i % 256 for i in iv)

以下是详细加密方法:

def add_to_16(text):
    if len(text.encode('utf-8')) % 16:
        add = 16 - (len(text.encode('utf-8')) % 16)
    else:
        add = 0
    text = text + ('\0' * add)
    return text.encode('utf-8')

def encryt_cbc(text, key, iv):
        cipher = AES.new(key, AES.MODE_CBC,iv)
        x = AES.block_size - (len(text) % AES.block_size)
        if x != 0:
            text = text + chr(x)*x
        msg = cipher.encrypt(text)
        # msg = base64.urlsafe_b64encode(msg).replace('=', '')
        msg = base64.b64encode(msg)
        return msg.decode()

iv=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

iv = bytes(i % 256 for i in iv)

phone='153****1316'
text=f'mphone={phone}'
key = '!~oX@y$]2wiq3#Fj'.encode('utf-8')#key是固定的

parms=encryt_cbc(text,key,iv)

相关文章

网友评论

      本文标题:Java AES cbc模式转Python 向量(iv)的问题及

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