MD5加密的特点

  1. 加密结果长度固定:16个字节或者32个十六进制字符
  2. 不可逆性,加密后的数据无法逆向还原,例如将密码进行Md5加密之后的密文存储在数据库里面,这样即使脱库也拿不到原始密码

Python实现MD5加密

import hashlib


def md5_encrypt(data):
    md5 = hashlib.md5()
    md5.update(data.encode('utf-8'))  # 将数据编码为字节流并更新哈希对象
    encrypted_data = md5.hexdigest()  # 获取加密后的结果,以十六进制表示
    return encrypted_data


# 示例用法
data = 'live_id=1,aid=6383,version_code=180800,webcast_sdk_version=1.0.7,room_id=7258340971358767906,sub_room_id=,sub_channel_id=,did_rule=3,user_unique_id=,device_platform=web,device_type=,ac=,identity=audience'
encrypted_data = md5_encrypt(data)
print(len(encrypted_data))
print("MD5加密结果:", encrypted_data)

以某音直播间为例:https://live.douyin.com/639709145929
页面中的websocket连接,如下:
image.png
可以看到signature字段为16个长度的字符串,接下来通过启动器定位到创建websocket的地方,并且打断点:
image.png
image.png

打印这行的e变量:
image.png
可以看到也是包含signature的参数,再观察一下变量t:
image.png
可以看到变量t中不包含signature,但是通过转换得到的变量e中就拿到了signature,所以进入getsocketparams的方法中去:image.png
下图圈出来的部分逻辑其实就是MD5加密的逻辑:
image.png

为什么说它就是MD5加密的逻辑,在这里重新打断点运行,打印出i.substring(1)的值:
image.png

'live_id=1,aid=6383,version_code=180800,webcast_sdk_version=1.0.8,room_id=7270811471758527290,sub_room_id=,sub_channel_id=,did_rule=3,user_unique_id=,device_platform=web,device_type=,ac=,identity=audience'

接着在控制台再执行这个F函数,如下图:
image.png
可以看到将前面一长串的字符串转换成了一个长度为32位的字符串,将长的字符串放到python的md5加密中计算得到:

import hashlib


def md5_encrypt(data):
    md5 = hashlib.md5()
    md5.update(data.encode('utf-8'))  # 将数据编码为字节流并更新哈希对象
    encrypted_data = md5.hexdigest()  # 获取加密后的结果,以十六进制表示
    return encrypted_data


# 示例用法
data = 'live_id=1,aid=6383,version_code=180800,webcast_sdk_version=1.0.8,room_id=7270811471758527290,sub_room_id=,sub_channel_id=,did_rule=3,user_unique_id=,device_platform=web,device_type=,ac=,identity=audience'
encrypted_data = md5_encrypt(data)
print("MD5加密结果:", encrypted_data)
MD5加密结果: 326b24139d1908958c7f2f7e8652731a

可以看出这个F函数的逻辑就是MD5加密,所以可以省下精力去分析F函数的逻辑。

最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏