MD5加密的特点
- 加密结果长度固定:16个字节或者32个十六进制字符
- 不可逆性,加密后的数据无法逆向还原,例如将密码进行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连接,如下:
可以看到signature字段为16个长度的字符串,接下来通过启动器定位到创建websocket的地方,并且打断点:
打印这行的e变量:
可以看到也是包含signature的参数,再观察一下变量t:
可以看到变量t中不包含signature,但是通过转换得到的变量e中就拿到了signature,所以进入getsocketparams的方法中去:
下图圈出来的部分逻辑其实就是MD5加密的逻辑:
为什么说它就是MD5加密的逻辑,在这里重新打断点运行,打印出i.substring(1)
的值:
'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函数,如下图:
可以看到将前面一长串的字符串转换成了一个长度为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函数的逻辑。
此处评论已关闭