热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

202017爬网页18js逆向入门(RSA加密非对称加密,安全性高。pem,jsencrypt.min.js)

本文只适用于初学者,只需要会打断点追踪就可以了。前端js代码除了Base64编码和解码,MD5加密,AES加密之外,有时候

本文只适用于初学者,只需要会打断点追踪就可以了。

前端js代码除了Base64编码和解码,MD5加密,AES加密之外,有时候还会用RSA加密。

关于RSA加密详细说明,参见
https://blog.csdn.net/u014044812/article/details/80782448
https://blog.csdn.net/u014044812/article/details/80866759

简介


RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。——维基百科

非对称算法有2个密钥,公钥和私钥。

1.加密和解密核心过程如下:

step1.用公钥 (n,e)加密
其中
e:Modulus,模数(系数)
n:Public exponent,指数

假设要一个字母m=“A”。
在通信传输中只能传输0和1,所以要先将“A”转ascii码为65,即m=65。m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。
通过以下加密公式算出密文c

密文c = 明文me(mod n)

表示:对明文m进行e次方后再对其用 n 求余,就得到了用RSA加密后的密文

由此,假设公钥为(n,e)=(3233, 17),明文m=65,那么密文c为

c = 6517(mod 3233)

所以,最终发送的密文就是2790

step2.用私钥(n,d)解密
接收方得到密文2790后,就用以下公式解密

明文m = 密文cd (mod n)

表示:将密文求 d 次方后再用 n 求余,就得到了原来的明文m。

此时接收方的私钥为 (n,d) = (3233,2753),明文为

m = 27902753 (mod 3233)

得到还原后的明文65,对应的字母就是A

2.整个RSA加解密过程如下:

  • 发送方获取到接收方的公钥 (n,e) = (3233,17)
  • 发送方选取发送的消息m=A=65。注意m要小于n,如果消息大于n,则可以分段加密!
  • 发送方过加密公式:c = me(mod n) 算出密文c=2790
  • 接收方获取到发送方的密文c=2790
  • 接收方利用自己的私钥 (n,d) = (3233,2753),使用解密公式:m = cd (mod n) 算出明文m=65=A

注意:RSA加密每次加密的结果是不一样的。具体原因参见链接

密钥生成

关于密钥和公钥的生成过程,参见链接

很多时候得到的公私钥是PEM格式,相关说明参见链接

例如

-----BEGIN PUBLIC KEY-----
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGeDHRzMP9RAy7Xpxb/GW37uEXDF
HVYHZbJvu4OdO+TNGwdB9vLs1eWRlgkO740WyE9OO33PPNu4JOg0uXH6ehH+CUqM
SUHAeDmGGWYEMKB4IETl/c0c452tMKsm6kcxRUrnHleB0gJsNgW4czlomzpSUHLh
16HDJ7ZQ2r38k0nXAgMBAAE=
-----END PUBLIC KEY-----

这是标准的pem公钥格式,bytes类型,每64字符换一次行。

pem格式是可以转换为指数,模数格式 (n,e)的。
在线转换链接–>http://tool.chacuo.net/cryptrsakeyparse

js使用RSA加密

看个实际的例子
在这里插入图片描述
上面的网站,我输入的密码是123456,但是看form data,jxy_parameter中的password显然是加密了。

搜索"jxy_parameter",打上断点
在这里插入图片描述

先清空COOKIE,local storage和session storage。刷新网页后,开始追踪。
在这里插入图片描述

进去以后就会看到上面界面。
那个函数function O(e),就是典型的RSA加密。

function O(e) {var t = new JSEncrypt;return t.setPublicKey(e.key),function(n) {return t.encrypt(e.hash + n)}}

我们先说一下上图中下面的那个函数,它会产生一个post请求getkey。
可以看一下,它能获得下面的请求结果。
在这里插入图片描述
看到了什么,对了,就是public key公钥。
我们说过,RSA加密需要对方的公钥,所以在网页提交请求后,会先和服务器通讯,获得服务器公钥,然后再继续后面的提交请求步骤。

这个公钥值是不会变化的。你可以尝试多次,结果一样。

除了公钥,getkey请求还得到参数hash,这个值每次请求都会变。它和明文合并后再被加密。

t.encrypt(e.hash + n)

现在继续跟踪function O(e)
在这里插入图片描述
它会进入另外一个js文件,jsencrypt.min.js。
后面就不再展开,有兴趣自己继续跟踪。

我们来说明一下jsencrypt.min.js文件。
在这个文件中你可看到下面的文字

// Copyright (c) 2005-2009 Tom Wu
// All Rights Reserved.
// See "LICENSE" for details.

Tom Wu是什么人?你可以去链接中了解。
在链接的bin目录下,你也能找到那个熟悉的jsencrypt.min.js。

在js中使用RAS加解密方法,似乎都是使用了Tom Wu的jsencrypt.min.js。
斯坦福的链接中能看到Demo。

使用方法很简单。
先引入


然后加密

function 加密(公钥, 明文) { var encrypt = new JSEncrypt();encrypt.setPublicKey(公钥);var 密文 = encrypt.encrypt(明文);return 密文
}

就和我们例子中展现的一致。


推荐阅读
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 深入解析HTTPS:保障Web安全的加密协议
    本文详细探讨了HTTPS协议在保障Web安全中的重要作用。首先分析了HTTP协议的不足之处,包括数据传输过程中的安全性问题和内容加密的缺失。接着介绍了HTTPS如何通过使用公钥和私钥的非对称加密技术以及混合加密机制,确保数据的完整性和机密性。最后强调了HTTPS的安全性和可靠性,为现代网络通信提供了坚实的基础。 ... [详细]
  • 本文通过具体实例详细分析了哈希冲突的原因及其潜在影响,并探讨了多种有效的解决策略。研究不仅涵盖了MD5等常用哈希算法的局限性,还提出了基于哈希表扩展、双哈希技术和布隆过滤器等方法的综合解决方案,以提高数据处理的可靠性和效率。 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文深入解析了Bitmap与Byte数组之间高效转换的方法,探讨了不同场景下的最优实现策略,提供了详尽的代码示例和性能对比分析,旨在帮助开发者在图像处理和数据传输中提升效率和减少资源消耗。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
author-avatar
JJ关键词
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有