T21摘要算法-哈希值挑战
一:抓包分析

打开控制台,翻页后看到请求体的加密参数,sign和code
直接全局搜sign=,找到加密点,当然也能搜索sign一个一个去判断


能看到实际code和sign都是从o里获得,o为r(n,s,a)函数生成,看o的调用能看出,一个是sha256加密,一个是sha3_256加密,进去r函数打断点

能看到s为页码+hash_challenge(固定值)+时间戳、o为固定值
直接网上找到sha256和sha3_256看看是否一致



能看出来一致,直接编码
二:编码与验证
调用sha256和sha3_256直接使用python库hashlib
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import hashlib
def sha256_hash(data) -> str: """返回数据的 SHA-256 十六进制字符串""" if isinstance(data, str): data = data.encode('utf-8') return hashlib.sha256(data).hexdigest()
def sha3_256_hash(data) -> str: """返回数据的 SHA3-256 十六进制字符串""" if isinstance(data, str): data = data.encode('utf-8') return hashlib.sha3_256(data).hexdigest()
|

能看到调用结果一致

请求调用发现报错:

发现headers里还有两个加密参数

也就是一个md5一个hmac加密

同理python实现当前加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| def md5_hash(data: Union[bytes, str]) -> str: """ 计算 MD5 哈希值。 参数: data: 字符串或字节串 返回: 十六进制字符串表示的 MD5 值 """ if isinstance(data, str): data = data.encode('utf-8') return hashlib.md5(data).hexdigest()
# 如果需要支持其他哈希算法(如 SHA-256)的 HMAC,可以添加一个参数 def hmac_custom(key: Union[bytes, str], data: Union[bytes, str], algorithm=hashlib.sha256) -> str: """ 使用指定哈希算法计算 HMAC。 参数: key: 密钥 data: 消息 algorithm: 哈希构造函数(如 hashlib.sha256, hashlib.sha1 等) 返回: 十六进制字符串表示的 HMAC 值 """ if isinstance(key, str): key = key.encode('utf-8') if isinstance(data, str): data = data.encode('utf-8') return hmac.new(key, data, algorithm).hexdigest()
|
强调一下,这里盐值有三个

别搞一样了

更多内容也在公众号更新:码字的秃猴
