后端java模拟前端RSA.js加密登录爬虫

news2024/12/24 0:12:06

项目开发过程中,经常会遇到数据爬取需求,但是对于某些网站,由于前端加密,导致数据爬取不容易。比如某网站,前端使用RSA.js加密,并且后端返回对应的公钥的指数和模数,通过后端返回的指数和模数对传输内容进行加密,如登录接口需要对账户及密码进行加密传输到后端,后端在解密后验证账户信息。

  • 一般用法:
    
  • 1、私钥加密,公钥解密(服务端加密,客户端解密)
    
  • 2、公钥加密,私钥解密(客户端加密,服务端解密)
    
  • 注意:私钥不要泄漏出去,客户端一般使用公钥
    

1.前端RSA加密(loginTest)
前端RSA加密代码及需要引用js文件(RSA.js、BigInt.js、Barrett.js),如下图所示
在这里插入图片描述
前端加密核心代码

    var key = null;
    var countdown = 90;
    var bool = true;
    // 公钥指数,16进制
    var empoent = "10001";
    // 公钥模数,16进制
    var module = "90e3486cbcb4858df6837d42a89564fa75f6186c7fde7e9ffc12ec7e53a02c2a98a4890dacc49621fd94b658913c3282233372746b26f346595e489f0855f7b3bfabd26828ea3a119827a85fca321b50c33a93c6864da106c7ee75f7c40cf3582e82405105745b74b9151d1eabe0db756999d198571a087cb9cb18f7a3ea2809";

    // 初始化key
    function initKey() {
	    setMaxDigits(130);
        key = new RSAKeyPair(empoent, "", module);
        
        console.log("key",key)
    }
    this.initKey()
   // encodeURIComponent编码,主要是针对特殊字符,比如@  + 等,+字符编码后是%2B,16进制
    console.log(username, encryptedString(key, encodeURIComponent('xxx')))
    console.log(password, encryptedString(key, encodeURIComponent('xxx')))

2.后端加密代码(RSAUtils.java)
关键核心代码,对于加密内容,如有特殊字符,比如@、#、$、+等,若前端编码处理,后端也需要转义,比如某个字符串abc+123,其中+就是特殊字符,需要对+编码处理,+编码%2B(16进制)。因此编码处理后的内容为abc%2B123,故加密内容为编码处理后的字符串abc%2B123。

    /**
     *
     * @param m 模数
     * @param e 指数
     * @param source  需要加密内容
     * @return
     */
    public static String encryptRsa(String m, String e, byte[] source) {
    	//需要注意前端传模数,如16进制,需要指定为16进制
        BigInteger modulus = new BigInteger(m, 16);
        BigInteger exponent = new BigInteger(e, 16);
        //使用的是百度统一登录页的modulus和exponent,可以根据实际项目不同来修改
        int chunkSize = modulus.bitLength() / 8 - 1;

        //算出分批加密每批的最大长度
        StringBuilder result = new StringBuilder();
        for(int i = 0; i < source.length; i += chunkSize) {
            BigInteger c = new BigInteger(arrayReverse(Arrays.copyOfRange(source, i, i + chunkSize)));
            result.append(c.modPow(exponent, modulus).toString(16));
        }
        return result.toString();
    }

    private static byte[] arrayReverse(byte[] src) {
        if (src == null) {
            return null;
        } else {
            int i = 0, j = src.length;
            byte[] result = new byte[j];
            while (true) {
                j--;
                if (j < 0) {
                    return result;
                }
                result[j] = src[i++];
            }
        }
    }

实例代码如下图所示
在这里插入图片描述
3.RSA.js前端及后端java加密demo
https://github.com/carteryh/java_rsa_encryption

4.相关大数据学习demo地址:
https://github.com/13162576590/big-data 或者
https://github.com/carteryh/big-data

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

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

相关文章

电商如何打开数字化的破局之路

电商网购已经成为我们的日常生活&#xff0c;在如此高节奏的工作下&#xff0c;打开手机或者电脑从网上挑选自己需要的物品&#xff0c;方便快捷&#xff0c;伴随着移动互联网和月的高速发展&#xff0c;电子商务作为现今的产业在我国快速增长和兴起。 如今的电商模式多种多样&…

Elasticsearch7.8.0版本入门——JavaAPI操作(批量操作文档)

目录一、pom文件依赖二、批量操作文档 代码示例2.1、批量创建文档 代码示例2.2、批量删除文档 代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch…

网络分层:OSI模型与TCP/IP模型

前言 这部分个人还是觉得有点难&#xff0c;之前也看过类似的文章&#xff0c;还是没有理解&#xff0c;更多的是概念掌握 OSI模型&#xff1a;Open System Interconnection 这是一个概念模型&#xff0c;存在于理论上&#xff0c;而没有真正实现。需要参考这样的模型&#x…

可以绕过 Windows UAC 吗

目录 一、引言 二、使用 COM 提升名称方法绕过 UAC 2.1 什么样的 COM 组件支持自动提权 2.2 如何以提升名称方法创建 COM 组件对象 2.3 有了权限提升的 COM 组件对象后&#xff0c;怎么为我们所用呢 2.4 使用 rundll32.exe 执行 COM 提升名称代码 2.4.1 rundll32.exe 简…

Qt使用QTextEdit来批量添加数据到数据库中

1.首先要了解QTextEdit的遍历方式 在下面的文章中已经介绍&#xff0c;这里就不在介绍了&#xff1a; 富文本处理&#xff08;QTextEdit&#xff09;_旷工锁的博客-CSDN博客_qtextedit 富文本 基本步骤为&#xff1a; 创建一个QTextEdit使用QTextDocument来获取QTextEdit中的…

IronPDF 2023.1 for Java Crack

关于 IronPDF for Java 在 Java 8、Kotlin 和 Scala 项目中创建、编辑和提取 PDF 内容。 IronPDF for Java&#xff08;作为 IronPDF for .NET 的一部分提供&#xff09;是一个 Java PDF 库&#xff0c;专为在 Windows、Linux 或云平台上运行的 Java 8、Kotlin 和 Scala 而设计…

2023-01-29 学习笔记:常见28种数据分析模型

2023-01-29 学习笔记&#xff1a;常见28种数据分析模型 知乎上的一篇文章&#xff0c;虽然之前对深度学习相关模型有所了解&#xff0c;但通过这篇文章了解了更多模型的应用场景&#xff0c;同时也知道了日常一共有多少种实用模型。 Excel/Python/sql/PowerBI/Pyecharts这些只是…

YOLOV3中卷积层,池化层,yolo层理解

前言&#xff1a;YOLOV3学习笔记&#xff0c;记录对卷积层&#xff0c;池化层&#xff0c;yolo层的理解&#xff0c;阐述深度学习中卷积核&#xff0c;通道数相关名词的含义。yolov3-tiny网络如下&#xff1a;卷积层0层为卷积层&#xff0c;其中filters16&#xff0c;表示的卷积…

css如何给div添加一个条纹背景,在背景上画一条有宽度的斜线

如图&#xff0c;想要实现div的背景上有一条深色的斜线。 这里主要使用的是css里的线性渐变属性。 先看一下网上示例及效果&#xff1a; 示例一 <body><div class"patterns pt1"></div><div class"patterns pt2"></div>…

Python - 实现logging根据日志级别输出不同颜色

文章目录一、完整代码二、代码解释三、附&#xff1a;自定义颜色对应代码前段时间因为工作需要脚本打印不同颜色的日志。查找了网上的一些方法&#xff0c;大部分都需要再安装第三方模块。后来选择采用比较简易的办法&#xff0c;类似于print()函数自定义内容颜色这种方式的缺陷…

抽烟行为监测识别系统 yolov5

抽烟行为监测识别系统通过pythonyolov5网络深度学习技术&#xff0c;对画面中人员抽烟行为进行主动识别检测。在介绍Yolo算法之前&#xff0c;首先先介绍一下滑动窗口技术&#xff0c;这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单&#xff0c;它将…

C# AForge的简单使用

AForge.NET专为计算机视觉和人工智能应用而设计&#xff0c;这种C#框架适用于图像处理、神经网络、遗传算法、模糊逻辑、机器学习和机器人等。 该库是一个开源项目&#xff0c;包括&#xff1a; AForge.Imaging —— 一些日常的图像处理和过滤器 AForge.Vision —— 计算机视…

【MySQL】MySQL高手是如何练成的?

MySQL什么是MySQL呢&#xff1f;怎样练成MySQL高手&#xff1f;在Linux安装MySQL问题处理Mysql 的用户管理什么是MySQL呢&#xff1f; Mysql 是开源的&#xff0c;可以定制的&#xff0c;采用了 GPL 协议&#xff0c;可以根据业务需要修改源码来开发自己的 Mysql 系统。 MySQL…

彻底弄懂图片懒加载及底层实现原理

我们都知道图片懒加载是前端性能优化比较常见的一个手段&#xff0c;那么&#xff0c;你真的了解图片懒加载吗&#xff0c;本文将带你从简单到复杂一步一步彻底弄懂其底层实现原理。试想一下&#xff0c;假设用户在访问我们的某个页面时&#xff0c;一开始就加载页面的全部图片…

Vue中组件通信-$attrs与$listeners

组件通信-$attrs与$listeners1.$attrs父子组件通信的一种$attrs与$listeners ---- 父子组件通信$attrs&#xff1a;组件实例的属性&#xff0c;可以获取到父亲传递的props数据&#xff08;前提子组件没有通过props接受&#xff09;$listeners&#xff1a;组件实例的属性&#x…

【AAAI2023】Ultra-High-Definition Low-Light Image Enhancement

【AAAI2023】Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method 代码&#xff1a;https://github.com/TaoWangzj/LLFormer 这个论文首先构建了ultra-high definition low-light &#xff08;UHD-LOL&#xff09;数据集&#xff0c…

Revit建模操作:地面拼花效果做法和构件上色

一、Revit中如何快速做出地面拼花效果 一般大厅地面都会采用拼花做装饰&#xff0c;下面给大家推荐一种快速做出拼花效果的方法。 1.在Revit中导入地面铺装的CAD图纸&#xff0c;通过拾取底图的线&#xff0c;配合绘制命令分别建立各个形状的楼板&#xff0c;如图1所示&#xf…

虚拟DOM与render函数

目录 一、虚拟DOM 1、虚拟DOM是什么 2、为什么要使用虚拟DOM &#xff08;1&#xff09;浏览器显示网页的五步过程&#xff1a; &#xff08;2&#xff09;虚拟DOM的优点 3、Diff算法 二、VNode简介 1、VNode是什么 2、VNode的作用 3、VNode的优点 4、VNode如何生成&a…

【FreeRTOS】详细讲解FreeRTOS中消息队列并通过示例讲述其用法

讲解FreeRTOS中消息队列及其用法使用消息队列的原因消息队列函数解析示例遇到的问题使用消息队列的原因 在裸机系统中&#xff0c;两个程序间需要共享某个资源通常使用全局变量来实现&#xff1b;但在含操作系统(下文就拿FreeRTOS举例)的开发中&#xff0c;则使用消息队列完成。…

MonekyRunner

MonekyRunner 文章目录MonekyRunner一、简介二、JDK环境变量三、配置Android SDK环境变量3.1.下载并解压&#xff1a;3.2.环境变量&#xff1a;3.3.查看MonkeyRunner&#xff1a;四、编写Python脚本五、运行脚本一、简介 MonkeyRunner是Android SDK中自带的工具之一&#xff0…