“1、网页查看,2、有道翻译简单实现源码,3、JS解密(详解),4、python实现JS解密后的完整代码,4.1、实现效果,5、JS解密后完整代码升级版,5.1、实现效果!

python MD5反向解密 python md5 解密_js md5解密

1、网页查看

python MD5反向解密 python md5 解密_python MD5反向解密_02

python MD5反向解密 python md5 解密_js url encode_03

python MD5反向解密 python md5 解密_md5解密代码_04

python MD5反向解密 python md5 解密_md5解密代码_05

python MD5反向解密 python md5 解密_md5解密代码_06

2、有道翻译简单实现源码

import requests#请求头#headers不能只有一个User-Agent,因为有道翻译是有一定的反扒机制的,所以我们直接全部带上headers = {    "Accept": "application/json, text/javascript, */*; q=0.01",    "Accept-Encoding": "gzip, deflate",    "Accept-Language": "zh-CN,zh;q=0.9",    "Connection": "keep-alive",    "Content-Length": "244",    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",    "Cookie": "OUTFOX_SEARCH_USER_ID=-1506602845@10.169.0.82; JSESSIONID=aaaUggpd8kfhja1AIJYpx; OUTFOX_SEARCH_USER_ID_NCOO=108436537.92676207; ___rl__test__cookies=1597502296408",    "Host": "fanyi.youdao.com",    "Origin": "http://fanyi.youdao.com",    "Referer": "http://fanyi.youdao.com/",    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36",    "X-Requested-With": "XMLHttpRequest",}#提交参数params = {    "i": "I love you",    "from": "UTO",    "to": "AUTO",    "smartresult": "dict",    "client": "fanyideskweb",    "salt": "15975022964104",    "sign": "7b7db70e0d1a786a43a6905c0daec508",    "lts": "1597502296410",    "bv": "9ef72dd6d1b2c04a72be6b706029503a",    "doctype": "json",    "version": "2.1",    "keyfrom": "fanyi.web",    "action": "FY_BY_REALTlME",}url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"#发起POST请求response = requests.post(url=url,headers=headers,data=params).json()print(response)

python MD5反向解密 python md5 解密_js url encode_07


    到这里表面上已经完成了有道翻译的代码,但其实还有问题,比如下方如果换了需要翻译的内容就会报错!

python MD5反向解密 python md5 解密_python MD5反向解密_08

python MD5反向解密 python md5 解密_js md5解密_09

原因


    我们在有道翻译重新翻译,会发起新的POST请求,而每次请求所带的参数值会有所不同,如果想要真正实现有道翻译功能,就要找到这四个参数值的生成方式,然后用python 实现同样的功能才行。

python MD5反向解密 python md5 解密_md5解密代码_10

3、JS解密(详解)

    Ctrl+Shift+f进行搜索,输入sign

python MD5反向解密 python md5 解密_js md5解密_11

python MD5反向解密 python md5 解密_js url encode_12

    

因为加密肯定是发起请求的时候加密,所有我们搜索 translate_o

python MD5反向解密 python md5 解密_python MD5反向解密_13

python MD5反向解密 python md5 解密_js md5 解密_14

 

   调试

python MD5反向解密 python md5 解密_python MD5反向解密_15


          在有道翻译重新输入翻译内容,即可到断点处停止。

python MD5反向解密 python md5 解密_md5解密代码_16


    但是发现数据已经是加密好了的。

python MD5反向解密 python md5 解密_js md5解密_17

    但由于我们是调试模式,可以返回到上一步,点击如下按钮。

python MD5反向解密 python md5 解密_js md5解密_18

  

  可以发现salt、sign、Its、bv都是通过r获取出来的,而r又是通过一个函数得到的。

python MD5反向解密 python md5 解密_python MD5反向解密_19


        进入该函数

python MD5反向解密 python md5 解密_md5解密代码_20

    可以发现这里就是加密的地方

    复制这段js代码,我们需要使用python代码来实现。

python MD5反向解密 python md5 解密_js md5 解密_21

python MD5反向解密 python md5 解密_js url encode_22


    可以看到是一模一样的,到这里算是有一点点小成功了。

python MD5反向解密 python md5 解密_js url encode_23

    注意这里翻译内容不同其bv也是不同的。

接下来看its,用Python实现

python MD5反向解密 python md5 解密_js md5解密_24

  

  可见Python生成的时间戳和JS的有所不同,但细心的小伙伴肯定知道怎么把python的时间戳变成跟JS一样。

python MD5反向解密 python md5 解密_js md5 解密_25

    这就ok了!

乘以1000转化为int舍弃小数位再转化为字符串,因为JS里是字符串

python MD5反向解密 python md5 解密_js md5 解密_26


      接下来看i,然后用python实现

python MD5反向解密 python md5 解密_js md5 解密_27

python MD5反向解密 python md5 解密_js md5 解密_28

   

 最后

python MD5反向解密 python md5 解密_python MD5反向解密_29

温馨提示:

python MD5反向解密 python md5 解密_js md5 解密_30


    可能会正在有道翻译更新时进行改变,但这不是什么问题,如果仔细看了JS解密的话,还是能够找到新的。

4、python实现JS解密后的完整代码

import requestsfrom hashlib import md5import timeimport random#请求地址url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"appVersion = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"headers = {    "Accept": "application/json, text/javascript, */*; q=0.01",    "Accept-Encoding": "gzip, deflate",    "Accept-Language": "zh-CN,zh;q=0.9",    "Connection": "keep-alive",    "Content-Length": "244",    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",    "Cookie": "OUTFOX_SEARCH_USER_ID=-1506602845@10.169.0.82; JSESSIONID=aaaUggpd8kfhja1AIJYpx; OUTFOX_SEARCH_USER_ID_NCOO=108436537.92676207; ___rl__test__cookies=1597502296408",    "Host": "fanyi.youdao.com",    "Origin": "http://fanyi.youdao.com",    "Referer": "http://fanyi.youdao.com/",    "user-agent": appVersion,    "X-Requested-With": "XMLHttpRequest",}def r(e):    # bv    t = md5(appVersion.encode()).hexdigest()    # lts    r = str(int(time.time() * 1000))    # i    i = r + str(random.randint(0,9))    return {        "ts": r,        "bv": t,        "salt": i,        "sign": md5(("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m").encode()).hexdigest()    }def fanyi(word):    data = r(word)    params = {        "i": word,        "from": "UTO",        "to": "AUTO",        "smartresult": "dict",        "client": "fanyideskweb",        "salt": data["salt"],        "sign": data["sign"],        "lts": data["ts"],        "bv": data["bv"],        "doctype": "json",        "version": "2.1",        "keyfrom": "fanyi.web",        "action": "FY_BY_REALTlME",    }    response = requests.post(url=url,headers=headers,data=params)    #返回json数据    return response.json()if __name__ == "__main__":    while True:        word = input("请输入要翻译的语句:")        result = fanyi(word)        #对返回的json数据进行提取,提取出我们需要的数据        r_data = result["translateResult"][0]        print(r_data[0]["src"])        print(r_data[0]["tgt"])


4.1实现效果


python MD5反向解密 python md5 解密_python MD5反向解密_31


5、JS解密后完整代码升级版


import requestsfrom hashlib import md5import timeimport random#请求地址url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"appVersion = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"headers = {    "Accept": "application/json, text/javascript, */*; q=0.01",    "Accept-Encoding": "gzip, deflate",    "Accept-Language": "zh-CN,zh;q=0.9",    "Connection": "keep-alive",    "Content-Length": "244",    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",    "Cookie": "OUTFOX_SEARCH_USER_ID=-1506602845@10.169.0.82; JSESSIONID=aaaUggpd8kfhja1AIJYpx; OUTFOX_SEARCH_USER_ID_NCOO=108436537.92676207; ___rl__test__cookies=1597502296408",    "Host": "fanyi.youdao.com",    "Origin": "http://fanyi.youdao.com",    "Referer": "http://fanyi.youdao.com/",    "user-agent": appVersion,    "X-Requested-With": "XMLHttpRequest",}def r(e):    # bv    t = md5(appVersion.encode()).hexdigest()    # lts    r = str(int(time.time() * 1000))    # i    i = r + str(random.randint(0,9))    return {        "ts": r,        "bv": t,        "salt": i,        "sign": md5(("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m").encode()).hexdigest()    }def fanyi(word):    data = r(word)    params = {        "i": word,        "from": "UTO",        "to": "AUTO",        "smartresult": "dict",        "client": "fanyideskweb",        "salt": data["salt"],        "sign": data["sign"],        "lts": data["ts"],        "bv": data["bv"],        "doctype": "json",        "version": "2.1",        "keyfrom": "fanyi.web",        "action": "FY_BY_REALTlME",    }    response = requests.post(url=url,headers=headers,data=params)    return response.json()if __name__ == "__main__":  #打开需要翻译的文章    with open("文章.txt",mode="r",encoding="utf-8") as f:        #获取文章全部内容        text = f.read()    result = fanyi(text)    r_data = result["translateResult"]    #翻译结果保存    with open("test.txt",mode="w",encoding="utf-8") as f:        for data in r_data:            f.write(data[0]["tgt"])            f.write('\n')            f.write(data[0]["src"])            f.write('\n')            print(data[0]["tgt"])            print(data[0]["src"])


5.1、实现效果


python MD5反向解密 python md5 解密_js url encode_32

 这是保存下来的JS解密代码以上为我Python爬虫JS解密详解用到的手段,如有不足之处或更多技巧,欢迎指教补充。愿本文的分享对您之后爬虫JS解密有所帮助。谢谢~

编辑排版:筱筱   原创:Code皮皮虾