“探秘JS加密算法:MD5、Base64、DES/AES、RSA你都知道吗?”

简介: “探秘JS加密算法:MD5、Base64、DES/AES、RSA你都知道吗?”

1、什么是JS、JS反爬是什么?JS逆向是什么?

JS: JS全称JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是一种轻量级的编程语言。JavaScript 是可插入 HTML 页面的编程代码。JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行JS反爬: JS反爬是指爬虫在获取网页数据时,遇到了通过JavaScript代码爬实现的反措施。JS反爬技术的实现方式包括动态渲染、异步加载、验证码、IP限制等多种方式。这些技术可以有效地防止爬虫的抓取,保护网站的数据安全。 JS逆向: JS逆向是指通过分析和破解JavaScript代码,获取反爬措施的规则和实现方式,从而绕过反爬措施,实现爬虫的抓取。JS逆向需要具备一定的JavaScript编程能力和代码分析能力,对于爬虫开发者来说是一项高级的技能。 需要注意的是,进行JS逆向可能会涉及到法律风险和道德问题,因此在进行爬虫开发时,应该遵守相关法规和道德规范,避免侵犯他人的合法权益。 <a name="FqXCK"></a>

2、JS逆向的大致流程

  1. 分析目标网站的反爬措施:使用浏览器开发者工具或网络抓包工具分析目标网站的JavaScript代码和网络请求数据,了解反爬措施的实现方式和规则。常见的反爬措施包括动态渲染、异步加载、验证码、IP限制等。
  2. 理解和分析JavaScript代码:使用代码编辑器或开发者工具等工具,分析网站的JavaScript代码,了解其运行原理、代码结构和实现方式。这可以帮助你找到反爬措施的规则和实现方式,从而更好地绕过它们。
  3. 绕过反爬措施:根据分析结果,采用相应的技术和方法绕过反爬措施。比如,对于动态渲染的网页,可以使用无头浏览器(如Selenium)模拟浏览器的操作,从而获取渲染后的网页数据;对于异步加载的网页,可以使用JavaScript库(如Puppeteer)模拟浏览器的异步请求,从而获取异步加载后的数据;对于验证码的网站,可以使用打码平台或自动识别技术(如OCR)来识别验证码。
  4. 调试和优化:进行调试和优化,确保爬虫程序能够稳定地运行,并且能够在反爬措施更新后及时进行适配。

需要注意的是,JS逆向需要具备一定的JavaScript编程能力和代码分析能力,不同的网站可能有不同的反爬措施和实现方式,因此需要根据具体情况采用不同的技术和方法进行绕过。同时,在进行JS逆向时,需要遵守相关法规和道德规范,避免侵犯他人的合法权益。 <a name="UJgyk"></a>

3、逆向的环境搭建

<a name="SJvg1"></a>

3.1、安装node.js

下载网站:Download | Node.js 参考网站:Node.js安装与环境配置_各自安好、的博客-CSDN博客<a name="ww4wp"></a>

3.2、安装js代码调试工具(vscode)

下载网站: Download Visual Studio Code - Mac, Linux, Windows 参数网站:https://www.cnblogs.com/csji/p/13558221.html 运行js代码插件: 在VSCode中直接运行js代码 - 简书<a name="uj7Ex"></a>

3.3、安装PyExecJs模块

PyExecJS用于实现在Python中运行JavaScript代码的功能,移植自Ruby的ExecJS库。 安装命令:pip install PyExecJs -i https://pypi.douban.com/simple<a name="VLXRj"></a>

4、JS常见加密算法

<a name="GRNgn"></a>

4.1、Base64算法

base64是一种用64个字符来表示任意二进制数据的方法。 base64使用 A--Z a--z 0--9 + / 这64个字符实现对数据的加密。 <a name="UpuIe"></a>

4.2、MD5算法

MD5是一种被广泛使用的线性散列算法,可以产出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)数据。 MD5参考网址: https://cdn.bootcdn.net/ajax/libs/blueimp-md5/1.0.1/js/md5.js md5破解网址:md5在线解密破解,md5解密加密 或者 md5在线加密解密 补充: 为了提高密码的安全性 一般会在密码后面加上一个随机数或者是时间戳 这个随机数或者是时间戳 我们一般称之为盐 <a name="kbODp"></a>

4.3、DES/AES算法

DES对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者。 和信息的接收者在进行信息的传输与处理时,必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()函数,解密用的是decrypt()函数。 AES/DES加密解密网址: 在线加密/解密,对称加密/非对称加密<a name="ZuF66"></a>

4.2.2 AES与DES的区别
  • 加密后密文长度不同
  • DES加密后密文长度是8的整数倍
  • AES加密后密文的长度是16的整数倍
  • 安全度不同
  • 一般情况下DES足够安全
  • 如果要求高可以使用AES
  • DES和AES切换只需要修改CryptoJS.DES =>CryptoJS.AES <a name="mFwmr"></a>

4.4、RSA算法

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。有两把对应密钥,公钥和私钥。用公钥加密只能用私钥解开,用私钥加密只能用公钥解密。 RSA加密解密网址:RSA加密、RSA解密 - 在线工具 - OKTools

  • 公开密钥(publickey:公钥)
  • 私有密钥(privatekey:私钥)
  • 公钥和私钥是一对 <a name="d0Y92"></a>

4.5 JS算法注意点

在JS逆向中,并不是所有的都存在加密算法 有时候 不需要去分析出是什么加密算法直接扣出代码即可。<a name="P6Sfm"></a>

5、chrome常见调试技巧

  1. 断点调试:在需要调试的JavaScript代码行上设置断点,当代码执行到该执行时,会暂停执行,可以查看当前变量和调用栈等信息。可以通过点击行号来设置断点。
  2. 控制台调试:在控制台面板中可以执行JavaScript代码,可以查看和修改数量的值,以及调用函数和方法等。可以使用console.log()、console.error()等方法来输出调试信息。 <a name="oTCbg"></a>

6、Base64编码详讲

<a name="W0EPv"></a>

Base64编码由来

为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种基于64个可打印字符来表示二进制数据的表示方法。 <a name="tvMMh"></a>

Base64编码原理分析参考

https://www.cnblogs.com/luguo3000/p/3940197.html<a name="iZ5Kp"></a>

Base64在python中的应用
import base64
"""将字符串转换成base64编码"""
string = "https://www.baidu.com"
temp_b = string.encode("utf-8")  import base64
"""将字符串转换成base64编码"""
string = "https://www.baidu.com"
temp_b = string.encode("utf-8")  # 将字符串转换为二进制
print(temp_b)
content_b = base64.b64encode(temp_b)
print(content_b)
str_result = content_b.decode('utf-8')
print(str_result)
"""将Base64编码还原为字符串"""
str_result = "aHR0cHM6Ly93d3cuYmFpZHUuY29t"
my_str = base64.b64decode(str_result).decode("utf-8")
print(my_str)
"""处理base64编码的图片"""
import base64
src = "data:image/jpg;base64,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"
# 切割字符串,获取后面图片数据部分
image_data = src.split(',')[1]
.jpg','wb') as f:
    f.write(image)
<a name="WHFAZ"></a>

7、MD5详讲

<a name="fWjGY"></a>
一、MD5加密是什么?

MD5是一种常用的消息摘要算法,它可以将任意长度的消息压缩成一个128位的哈希值。MD5算法广泛应用于数字签名、数据完整性校验、密码学等领域。 MD5(Message-Digest Algorithm 5)是一种常用的哈希算法,它将任意长度的消息压缩成一个128位的消息摘要(即哈希值),并且具有不可逆性、唯一性、抗碰撞性等特点。 <a name="bEnci"></a>

二、MD5加密解密的原理?

MD5算法的原理是将输入的消息分成512位的数据块,每个数据块再分成16个32位的小块,然后通过一系列的位运算和非线性函数,对每个小块进行处理,最终得到一个128位的哈希值。由于MD5算法的设计,即使输入的消息只有微小的变化,也会导致输出的哈希值发生巨大的变化,因此可以用来验证数据的完整性和真实性。 <a name="vCvKT"></a>

三、MD5算法的用途

数据完整性验证:通过比较两个文件的MD5值,可以判断它们是否相同,从而验证文件的完整性。 密码加密:将用户的密码进行MD5加密后,可以保证用户密码的安全性,即使数据库被攻击,攻击者也无法直接获取用户的密码。 数字签名:数字签名是一种保证数据完整性和真实性的技术,MD5算法可以用来生成数字签名。 安全访问控制:MD5算法可以用来生成安全访问控制的密钥,从而保证访问控制的安全性。


相关文章
|
5月前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
200 9
|
7月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
274 0
|
5月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
336 3
|
5月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
281 1
|
6月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
368 3
|
运维 监控 JavaScript
内网网管软件中基于 Node.js 的深度优先搜索算法剖析
内网网管软件在企业网络中不可或缺,涵盖设备管理、流量监控和安全防护。本文基于Node.js实现深度优先搜索(DFS)算法,解析其在网络拓扑遍历中的应用。通过DFS,可高效获取内网设备连接关系,助力故障排查与网络规划。代码示例展示了图结构的构建及DFS的具体实现,为内网管理提供技术支持。
249 11
|
11月前
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
455 35
|
10月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
257 3
|
10月前
|
存储 监控 算法
公司内部网络监控中的二叉搜索树算法:基于 Node.js 的实时设备状态管理
在数字化办公生态系统中,公司内部网络监控已成为企业信息安全管理体系的核心构成要素。随着局域网内终端设备数量呈指数级增长,实现设备状态的实时追踪与异常节点的快速定位,已成为亟待解决的关键技术难题。传统线性数据结构在处理动态更新的设备信息时,存在检索效率低下的固有缺陷;而树形数据结构因其天然的分层特性与高效的检索机制,逐渐成为网络监控领域的研究热点。本文以二叉搜索树(Binary Search Tree, BST)作为研究对象,系统探讨其在公司内部网络监控场景中的应用机制,并基于 Node.js 平台构建一套具备实时更新与快速查询功能的设备状态管理算法框架。
338 3
|
9月前
|
算法 安全 数据安全/隐私保护
基于AES的图像加解密算法matlab仿真,带GUI界面
本程序基于AES算法实现图像的加解密功能,并提供MATLAB GUI界面操作,支持加密与解密。运行环境为MATLAB 2022A,测试结果无水印。核心代码通过按钮回调函数完成AES加密与解密流程,包括字节替换、行移位、列混淆及密钥加等步骤。解密过程为加密逆向操作,确保数据安全性与完整性。完整程序结合128位块加密与可选密钥长度,适用于图像信息安全场景。

热门文章

最新文章