python爬虫-有道翻译-js加密破解

本文解析了有道翻译网站的JS加密算法,通过分析请求参数,重点介绍了sign参数的生成过程,包括时间戳、随机数及MD5加密的使用,并提供了一段Python代码实现自动翻译,展示了如何绕过网站的加密机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有道翻译-js加密破解

这是本地爬取的网址:http://fanyi.youdao.com/

一、分析请求

我们在页面中输入:水果,翻译后的英文就是:fruit。请求携带的参数有很多,先将参数数据保存下来,做一个记录。

1420658-20190911163625083-1160630405.jpg

我们再输入一个新的词:西瓜
1420658-20190911163647154-1471360606.png

i: 西瓜
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 15681884266087
sign: 1ea84aac4a04982f4a775f361ae30351
ts: 1568188426608
bv: a4f4c82afd8bdba188e568d101be3f53
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

i: 水果
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 15681879672603
sign: 0f711cd437e15430dc1df1dd0948fb66
ts: 1568187967260
bv: a4f4c82afd8bdba188e568d101be3f53
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

对比一下,这两次请求携带的数据哪些参数不一样:很容易看出i,salt,ts,sign这四个参数是不一样的。i:就是你需要翻译的词,ts的话应该能够猜到是时间戳,salt他就是ts参数后面加了一个数字对吧。现在的话,我们就差sign的参数不知道是什么了吧。它是32位的数据,不出意外的话应该就是md5加密字符串了。

二、加密参数破解

就差sign不知道是怎么生成的,那就以sign为关键字,进行搜索就好。看看它出现的位置。

1420658-20190911163657486-1044929537.png

打好断点之后,我们在换个词进行翻译:香蕉

1420658-20190911163729975-780139437.png
1420658-20190911163818929-1998636810.png

加密函数我就不解释了,navigator.appVersion就是浏览器的user-agent

def get_encrypt_data(keyword):
    t = "5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
    bv = hashlib.md5(bytes(t, encoding="utf-8")).hexdigest()
    ts = str(int(round(time.time(), 3) * 1000))
    salt = ts + str(random.randint(1, 10))
    sign = hashlib.md5(
        bytes("fanyideskweb" + keyword + salt + "n%A-rKaT5fb[Gy?;N5@Tj", encoding="utf-8")).hexdigest()
    return ts, bv, salt, sign

三、成功响应:
1420658-20190911163829657-380959260.png

import requests, time, random, hashlib
from fake_useragent import UserAgent

ua = UserAgent()

url = "http://fanyi.youdao.com/translate_o"

headers = {
    "User-Agent": ua.random,
    "Referer": "http://fanyi.youdao.com/",
}
s = requests.Session()


def get_encrypt_data(keyword):
    t = "5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
    bv = hashlib.md5(bytes(t, encoding="utf-8")).hexdigest()
    ts = str(int(round(time.time(), 3) * 1000))
    salt = ts + str(random.randint(1, 10))
    sign = hashlib.md5(
        bytes("fanyideskweb" + keyword + salt + "n%A-rKaT5fb[Gy?;N5@Tj", encoding="utf-8")).hexdigest()
    return ts, bv, salt, sign


def param():
    dic = {}
    dic["i"] = keyword,
    dic["from"] = "AUTO",
    dic["to"] = "AUTO",
    dic["smartresult"] = "dict",
    dic["client"] = "fanyideskweb",
    dic["doctype"] = "json",
    dic["version"] = "2.1",
    dic["keyfrom"] = "fanyi.web",
    dic["action"] = "FY_BY_REALTlME",
    dic["ts"], dic["bv"], dic["salt"], dic["sign"] = get_encrypt_data(keyword)
    return dic


if __name__ == '__main__':
    re = s.get("http://fanyi.youdao.com/", headers=headers)
    keyword = input("输入你想翻译的内容>>>:").strip()
    response = s.post(url=url, data=param(), headers=headers)
    msg = response.json().get("translateResult")[0][0]
    print('''翻译内容>>>:{}
翻译结果>>>:{}'''.format(msg.get("src"), msg.get("tgt")))

转载于:https://www.cnblogs.com/zhuchunyu/p/11507114.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值