# 导入必要的模块和库
import time
import re
import json
import requests
from hashlib import md5
import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
# pip install pycryptodome
# 将存放模块的文件(Crypto)改成大写开头(Crypto)
# 接下来对字符串进行解密,将解密后的字节码转换为utf-8编码的文本字符串。
'''
这段代码主要实现了一个AES-CBC加密算法的解密过程,使用了哈希函数增强了密钥和初始向量的安全性,
并通过base64编解码和padding移除等操作对加密消息进行了处理。
'''
def decrypt(decrypt_str):
# 设置密钥和初始向量
# 这里定义了两个变量key和iv,分别表示密钥和初始向量。
# 注意到这两个字符串已经被加密处理,因此在使用之前需要将它们进行解密。
key = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl"
iv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4"
# 对密钥和初始向量进行哈希处理
# 使用了哈希函数md5对密钥和初始向量进行处理。在处理之前,
# 需要将密钥和初始向量从字符串类型转换为字节类型,并在处理后获取到它们的哈希值。
key_md5 = hashlib.md5((key).encode('utf-8')).digest()
iv_md5 = hashlib.md5((iv).encode('utf-8')).digest()
# 创建AES对象并解密消息
# 创建了一个AES对象,使用了上一步中得到的哈希值作为密钥和初始向量的值,
# 并使用CBC模式进行加密解密操作。
# 然后,我们对传入的待解密字符串进行base64解码,再使用解密过程对其进行解密操作。
aes = AES.new(key=key_md5, mode=AES.MODE_CBC, iv=iv_md5)
code = aes.decrypt(base64.urlsafe_b64decode(decrypt_str))
# 移除padding并返回结果
# 通过Crypto.Util.Padding.unpad函数移除了解密后的字节码中的padding,
# 并通过.decode('utf8')将其转换为文本字符串类型。
# 最终,我们从decrypt函数中返回了解密后的明文字符串。
return unpad(code, AES.block_size).decode('utf8')
def get_cn_en():
t = int(time.time())
e = "fsdsogkndfokasodnaso"
client = 'fanyideskweb'
product = 'webfanyi'
data = f'client={client}&mysticTime={e}&product={product}&key={t}'
m = md5()
m.update(data.encode('utf-8'))
nonce = m.hexdigest()
url = 'https://dict.youdao.com/webtranslate'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68',
'cookie': '_ga=GA1.2.1274726434.1656475034; OUTFOX_SEARCH_USER_ID_NCOO=1904262487.256272; OUTFOX_SEARCH_USER_ID="[email protected]"',
'referer': 'https://fanyi.youdao.com/'
}
keyword = input('请输入需要查询的汉语:')
data = {
'i': keyword,
'from': 'auto',
'to': '',
'domain': '0',
'dictResult': 'true',
'keyid': 'webfanyi',
'sign': 'f522e5818a8497d9a329a93a522eaa2e',
'client': 'fanyideskweb',
'product': 'webfanyi',
'appVersion': '1.0.0',
'vendor': 'web',
'pointParam': 'client,mysticTime,product',
'mysticTime': '1683270687293',
'keyfrom': 'fanyi.web',
}
response = requests.post(url, headers=headers, data=data).content.decode()
response = decrypt(response)
translate = re.findall('"tgt":"(.*?)","src"', response)[0]
return translate
if __name__ == '__main__':
while 1:
word=get_cn_en()
print(word)