逆向案例14——cnki学术翻译AES加密分析,涉及保持会话和获取token值

python代码:

import execjs
import requests
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
token_url = "https://dict.cnki.net/fyzs-front-api/getToken"
url = 'https://dict.cnki.net/fyzs-front-api/translate/literaltranslation'
session = requests.session()
def get_token():headers = {'User-Agent': UA,}response = session.get(url=token_url,headers=headers).json()token = response['data']return token
def get_encrypted_words(words):js_code = execjs.compile(open('demo.js','r',encoding='utf-8').read())encrypted_words = js_code.call('s',words)return encrypted_wordsdef get_translated_words(token,encrypted_words):headers = {'User-Agent': UA,'Token':token,}data = {'translateType': "0",'words': encrypted_words,}response = session.post(url=url,json=data,headers=headers)result = response.json()['data']['mResult']return resultif __name__ == '__main__':words = input('请输入你要翻译的句子:')token = get_token()encrypted_words = get_encrypted_words(words)translated_words = get_translated_words(token,encrypted_words)print('翻译结果为:',translated_words)

js代码:

const CryptoJS = require('crypto-js');
n = "4e87183cfd3a45fe"function s(t) {var e = {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}, i = CryptoJS.enc.Utf8.parse(n), s = CryptoJS.AES.encrypt(t, i, e), r = s.toString().replace(/\//g, "_");return r = r.replace(/\+/g, "-"),r
}

结果展示:

 

首先抓包,发现翻译请求为post请求且有翻译的内容加密。

 

先请求获取数据,发现请求头不加token是获取不到数据的,获取token要专门去访问一个网址获得,且为了保持请求翻译时登陆状态一致,需要用session发送请求。

 

如何定位 words的加密位置呢,两种方法,一搜索translateType关键字,在去打断点定位。

二是因为这是xhr请求,因此可以xhr断点请求。释放xhr断点,接着在这里打断点,点击翻译。在右侧可以找到加密的words值

 

接着往上跟栈,找没有被加密的地方。最后发现在这里

 

释放其他断点,点击翻译,在这里打上断点

在控制台打开,发现由h.encrypto函数加密,进入它 ,即函数s(t)

 

 

释放其他断点,在return处打上断点,点击翻译。

 

发现a是一个标准AES加密算法,复制代码,复制n,在js中调用专门的库,替换a

注意:获取token的网址我也不知道咋来的,看别人的代码。

写代码遇到的错误:{"timestamp":"2024-04-07T20:03:35.755+0800","status":415,"error":"Unsupported Media Type","message":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","path":"/fyzs-front-api/translate

这个错误表明服务器不支持请求中指定的媒体类型。具体地说,服务器不支持 'application/x-www-form-urlencoded;charset=UTF-8' 这种媒体类型。
要解决这个问题,您可以尝试使用其他媒体类型发送请求,例如 'application/json'。您需要确保将请求的数据转换为 JSON 格式,并使用适当的请求头来指定媒体类型为 JSON。
teraltranslation"}

思考:以后遇到请求头需要token值,去哪里找到token值呢?

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像分割-RSPrompter

文章目录 前言1. 自动化提示器1.1 多尺度特征增强器1.2 RSPrompterAnchor-based PrompterQuery-based Prompter 2. SAM的扩展3. 结果WHU数据集NWPU数据集SSDD数据集 前言 《RSPrompter: Learning to prompt for remote sensing instance segmentation based on visual foundati…

一文读懂Memory consistency model (内存模型)

Memory consistency model又称Memory model (内存模型),定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。Memory model定义了软硬件接口规范,以便程序员预料硬件会有什么行为,而硬件实现者知道可以使用什么样…

牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f 思路 前缀树动态规划参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

OpenCV4.9处理平滑图像

返回:OpenCV系列文章目录(持续更新中......) 上一篇:使用OpenCV4.9的随机生成器和文本 下一篇:OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何使用 OpenCV …

助力瓷砖生产智造,基于YOLOv5全系列参数【n/s/m/l/x】模型开发构建瓷砖生产制造场景下1280尺寸瓷砖表面瑕疵检测识别系统

砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光,最后进行质量检测和包装。得益于产业自动化的发展,目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说,一条产线需要配数名质检工&#…

【三十三】【算法分析与设计】回溯(1),46. 全排列,78. 子集,没有树结构,但是依旧模拟树结构,回溯,利用全局变量+递归函数模拟树结构

46. 全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3&a…

缺陷检测项目 | 使用OpenCV实现纺织品表面缺陷检测

项目应用场景 面向纺织品表面缺陷检测场景,使用 OpenCV 来实现,因此无需深度学习复杂的训练流程,实现起来会更加便捷。 项目效果: 项目细节 > 具体参见项目 README.md 项目采用 VisualStudio C# 开发,所以用 Visua…

AcWing---转圈游戏---快速幂

太久没写快速幂了... 这是一道数学题orz,能看出来的话答案就是 ,但是很大,同时还要mod n,直接用快速幂即可。 快速幂模版: long long int power(long long int a,long long int b,long long int mod){long long int r…

pandas(day6 图表)

一. 计算效率 1. 测量代码运行时间 %%time %%timeit 单纯计算 代码块执行的时长 %%time _sum(np.arange(6)) CPU times: total: 0 ns Wall time: 1.66 ms用于多次运行代码块并计算平均执行时间 %%timeit _sum(np.arange(6))738 ns 10.7 ns per loop (mean std. dev. of 7…

java流式计算Stream

java流式计算Stream 流(Stream)到底是什么呢? 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 “集合讲的是数据,流讲的是计算! ” 特点: Stream自己不会存储元素。 Stream不会改变源对象。相反&#x…

金三银四面试题(十六):MySQL面试都问什么(1)

在开发岗位面试中,MySQL基本是必考环节。所以接下来我们就进入MySQL八股文环节,看看都有哪些高频考题。 MySQL 中有哪些不同的表格? 在MySQL中,可以创建多种不同类型的表格,其中一些常见的类型包括: InnoD…

性能优化-如何爽玩多线程来开发

前言 多线程大家肯定都不陌生,理论滚瓜烂熟,八股天花乱坠,但是大家有多少在代码中实践过呢?很多人在实际开发中可能就用用Async,new Thread()。线程池也很少有人会自己去建,默认的随便用用。在工作中大家对…

ThingsBoard通过MQTT发送属性数据

MQTT基础 客户端 MQTT连接 属性上传API 案例 MQTT基础 MQTT是一种轻量级的发布-订阅消息传递协议,它可能最适合各种物联网设备。 你可以在此处找到有关MQTT的更多信息,ThingsBoard服务器支持QoS级别0(最多一次)和QoS级别1&…

3D打印技术引领压铸模具制造新变革

随着工业4.0浪潮的席卷,3D打印技术以其独特优势,正逐渐成为新一轮工业革命中的璀璨明星。这一技术不仅为“中国制造”向“中国智造”的转型提供了强大动力,也为压铸模具这一铸造行业的重要分支带来了前所未有的变革。 压铸模具,作…

文心一言指令词宝典之咨询分析篇

作者:哈哥撩编程(视频号、抖音、公众号同名) 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅…

NAT网络地址转换原理解析

NAT(Network Address Translation),即网络地址转换,是一种在1994年提出的地址转换技术。它的主要目的是在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址。NAT实际上是为解决IPv4地址短缺而开发的技术。NAT…

以诚待人,用心做事,做到最好,追求更好

无数个日日夜夜,终于换来了这样一份努力的证明。 2023年,收获满满,前一阵子拿到了证书,忘记拍照了,今天抽空记录一下 收获!又得到一份肯定,这份荣誉证书将伴随我一直为了进步而奋斗&#xff1a…

基于SSM的基于个人需求和地域特色的外卖推荐系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的基于个人需求和地域特色的外卖推荐系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

非关系型数据库(缓存数据库)redis的集群

目录 一.群集模式——Cluster 1.原理 2.作用 3.特点 4.工作机制 哈希槽 哈希槽的分配 哈希槽可按照集群主机数平均分配(默认分配) 根据主机的性能以及功能自定义分配 redis集群的分片 分片 如何找到给定key的分片 优势 二. 搭建Redis群集…

TAB标签美化 - SVG作为mask

今天觉得V3的标签不是很好看,忽然想起来之前看过Vue Admin Beautiful Pro的样式挺好的,顺手研究了一把。发现Vue Admin Beautiful是采用PNGmask css来解决的。于是乎打算把V3的标签页做点小美化,但是迁移过程发生些小插曲,在此记录…