声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖!
文章目录
- 一、前言
- 二、网站分析
- 1.参数kiv
- 2.参数b
- 3.响应加密
一、前言
网址:
aHR0cHM6Ly93d3cua2Fuemh1bi5jb20vZmlybS9yZWNydWl0LzBueF8zZ35+Lmh0bWw/a2E9Y29tLXJlY3J1aXQtbW9kdWxlLWV4cG9zZQ==
二、网站分析
查看招聘信息,向下翻页,抓包。
发现参数中的kiv和b加密
响应数据加密
全局搜索kiv,然后再搜索找到这里
a就是kiv,t就是b,这里可以看到b和kiv的生成
1.参数kiv
先看kiv,即a参数,进入M._A
,就是一个随机数
2.参数b
参数b,即t
t = M.mA(n, { iv: a}).replace(/\//g, "_").replace(/\+/g, "-").replace(/=/g, "~")
其中的n和页数有关系
再进入M.mA
再进入l,可以看到是个AES加密,其中iv就是我们kiv
key经过测试是固定值
python实现
import base64
from Crypto.Cipher import AES
# 密钥和IV
AES_SECRET_KEY = 'G$$QawckGfaLB97r' # 此处16|24|32个字符,分别对应AES-128、AES-192和AES-256
IV = 'riGSUvXa1YWwtogp' # 和密钥等长
# padding算法
BS = len(AES_SECRET_KEY)
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s: s[0:-ord(s[-1:])]
class AES_ENCRYPT:
def __init__(self):
self.key = AES_SECRET_KEY
self.mode = AES.MODE_CBC
# 加密函数
def encrypt(self, text):
cryptor = AES.new(self.key.encode("utf8"), self.mode, IV.encode("utf8"))
self.ciphertext = cryptor.encrypt(bytes(pad(text), encoding="utf8"))
# AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题,使用base64编码
return base64.b64encode(self.ciphertext).decode("utf-8")
# 解密函数
def decrypt(self, text):
decode = base64.b64decode(text)
cryptor = AES.new(self.key.encode("utf8"), self.mode, IV.encode("utf8"))
plain_text = cryptor.decrypt(decode)
return unpad(plain_text).decode("utf-8")
def chinese_to_ascii(text):
text2 = base64.b64encode(text.encode('utf-8')).decode('ascii')
return text2
if __name__ == '__main__':
aes_encrypt = AES_ENCRYPT()
text = "{\"encCompanyId\":\"0nx_3g~~\",\"pageIndex\":2}"
e = aes_encrypt.encrypt(text)
print(text)
print(e)
结果相同,最后别忘了替换
问下文心一言
3.响应加密
既然加密是AES,那么解密大概率也是,搜索.decrypt
,找到这里,刷新页面