JS加密方式

2023-11-14

常见加密方式:

加密:
前端{
1.把加密的数据给后端
2.JS加密
3.携带正确的参数——进行加密}
后端:存入数据库或者校验

为了反爬,前端请求就会进行携带指定的参数,参数的值会进行加密,后端再进行校验

1.MD5加密

概念:线型散列算法(签名算法)
加密:产生一个固定长度的十六进制的数据(32位或16位)
解密:常规的说法:MD5是不存在解密的(不可解密)。
理论上可以破解——暴力破解,逐个比对,轮询,但需要庞大的数据量、长时间、高性能机器。
JS如何进行MD5加密?
压缩文件:命名符合规范,就会有min
https://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.min.js
未压缩文件:https://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.js
开发阶段选择未压缩文件,可读性强,部署阶段用压缩文件,节约空间

JS实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MD5</title>
</head>
<body>
    <script type="text/javascript" src="http://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.min.js"></script>
    <script type="text/javascript">
        //MD5加密
        var sign = md5('123456')
        console.log(sign)
    </script>
</body>
</html>

python实现:

from hashlib import md5

def md5_encryption(code):
    '''
    md5加密——方法返回对象
    :param code: str类型,要加密的字符串
    :return:str:返回加密后的字符串
    '''

    md = md5() #实例化——得到MD5加密对象
    md.update(code.encode())  #生成加密数据
    return md.hexdigest()   #获取加密数据

if __name__ == '__main__':
    sign = md5_encryption('123456')
    print(sign,len(sign))
实例:有道翻译JS逆向(MD5)

需求:抓取有道的接口,实现翻译的功能

步骤
1.参数分析步骤
(1)ctrl+shift+f全局搜索参数字段
(2)逐个分析
(3)拆解:假设、验证,console ,断点进行参数查看
2.python实现

spider.py

import scrapy
from time import time
import random
from hashlib import md5

class YoudaoSpider(scrapy.Spider):
    name = 'youdao'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule',]
    def start_requests(self):
        # 获取查询单词
        word = input('请输入你要查询的单词:')
        # 获取当前时间戳
        lts = str(int(time() * 1000))
        # 获取salt
        salt = lts + str(random.randint(0, 9))
        # 获取sign
        sign = "fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT"
        md = md5()  # 实例化——得到MD5加密对象
        md.update(sign.encode())  # 生成加密数据
        sign = md.hexdigest()
        post_data = {
            'i': word,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': salt,
            'sign': sign,
            'lts': lts,
            'bv': '679a714475741baa9769e4725c532bb7',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTlME',
        }
        # 将cookie转成字典类型
        cookies = 'OUTFOX_SEARCH_USER_ID=1370777476@2409:8920:400:46ac:a171:61b:7868:1c32; OUTFOX_SEARCH_USER_ID_NCOO=1092215250.8540661; UM_distinctid=179d34a1f154d-057d5ca47388f3-6701b35-144000-179d34a1f161e3; JSESSIONID=aaap-S9l5WclRfOMVkgQx; ___rl__test__cookies='+lts
        cookies = {i.split('=')[0]: i.split('=')[1] for i in cookies.split('; ')}
        print(post_data)
        # 手动发送post请求
        yield scrapy.FormRequest(url = self.start_urls[0],
                                 headers={
            'Host': 'fanyi.youdao.com',
            'Origin': 'https://fanyi.youdao.com',
            'Referer': 'https://fanyi.youdao.com/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',
        },
                                 formdata=post_data,
                                 callback=self.parse,
                                 cookies = cookies)
    def parse(self, response):
        print(response,response.text)

在这里插入图片描述

2.DEF/AES加密

概念:对称性加密算法

在这里插入图片描述

DES加密:

from Cryptodome.Cipher import DES
import binascii
from time import time
import random
class MyDESCipher:
    def __init__(self,key,iv):
        self.key = key
        self.iv = iv

    def encryption(self,data):
        '''

        :param data:
        :return:
        '''
        cipher = DES.new(self.key,DES.MODE_CFB,self.iv)
        data = data.encode()
        return binascii.b2a_hex(cipher.encrypt(data))

    def decryption(self,data):
        '''
        解密
        :param data:十六进制转二进制
        :return:
        '''
        data = binascii.a2b_hex(data)
        cipher =DES.new(self.key,DES.MODE_CFB,self.iv)#创建相同的规则
        return cipher.decrypt(data).decode()



if __name__ == '__main__':
    #需要加密的数据
    word = 'hello world'
    lts = str(int(time() * 1000))  # 获取当前时间戳
    salt = lts + str(random.randint(0, 9))  # 获取salt
    sign = "fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT"  # 获取sign

    # 秘钥
    key = b'maquYIGE'
    iv = b'12345678'

    myDEFCipher = MyDESCipher(key,iv)
    res = myDEFCipher.encryption(sign)
    print(res)

    data = myDEFCipher.decryption(res)
    print(data)

AES加密:

from Cryptodome import Random
from Cryptodome.Cipher import AES
import binascii
from time import time
import random
class MyAESCipher:
    def __init__(self,key,iv):
        self.key = key
        self.iv = Random.new().read(AES.block_size)

    def encryption(self,data):
        '''

        :param data:
        :return:
        '''
        cipher = AES.new(self.key,AES.MODE_CFB,self.iv)
        data = data.encode()
        return binascii.b2a_hex(cipher.encrypt(data))

    def decryption(self,data):
        '''
        解密
        :param data:十六进制转二进制
        :return:
        '''
        data = binascii.a2b_hex(data)
        cipher =AES.new(self.key,AES.MODE_CFB,self.iv)#创建相同的规则
        return cipher.decrypt(data).decode()



if __name__ == '__main__':
    #需要加密的数据
    word = 'hello world'
    lts = str(int(time() * 1000))  # 获取当前时间戳
    salt = lts + str(random.randint(0, 9))  # 获取salt
    sign = "fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT"  # 获取sign

    # 秘钥,偏移向量(16位)
    key = b'maquYIGEmaquYIGE'
    #iv = Random.new().read(AES.block_size)

    myAESCipher = MyAESCipher(key,iv)
    res = myAESCipher.encryption(sign)
    print(res)

    data = myAESCipher.decryption(res)
    print(data)

3.RSA加密

概念:非对称性加密算法
两个秘钥,分为秘钥:公钥和私钥,私钥由公钥计算得到。
公钥对数据进行加密,只有使用对应的私钥才能解密。
优点:算法复杂
缺点:比对称加密慢

在这里插入图片描述

import rsa
import binascii

def rsa_encrypt(rsa_n,rsa_e,data):
    #公钥
    key = rsa.PublicKey(rsa_n,rsa_e)
    res = rsa.encrypt(data.encode(),key)
    return binascii.b2a_hex(res)

public_n = '30819f300d06092a864886f70d010101050003818d0030818902818100b231a2588df3a48d614084d22124b409076cbc386dc1dd877ca01bffddedd41a519ac83537dacaf7b797c2a9e4200bce661dc433e856963f928b1e4022d3a875fbe68a796c049a6df721e16c035e58936f0476279bed93129cc39768788dd48761df8e45c8eb2a9fe0bcab4ee9226d524a28c9a60878878fbdcca8bb344fb6a10203010001'
public_e = '10001' #一般都是这个

#把16进制数据转整数
rsa_n = int(public_n,16)
rsa_e = int(public_e,16)
data = 'hello world'
print(rsa_encrypt(rsa_n,rsa_e,data))

自定义加密方式

在这里插入图片描述
在这里插入图片描述

import rsa
import binascii

def rsa_encrypt(rsa_n,rsa_e,data):
    #公钥
    key = rsa.PublicKey(rsa_n,rsa_e)
    res = rsa.encrypt(data.encode(),key)
    return binascii.b2a_hex(res)

public_n = '30819f300d06092a864886f70d010101050003818d0030818902818100b231a2588df3a48d614084d22124b409076cbc386dc1dd877ca01bffddedd41a519ac83537dacaf7b797c2a9e4200bce661dc433e856963f928b1e4022d3a875fbe68a796c049a6df721e16c035e58936f0476279bed93129cc39768788dd48761df8e45c8eb2a9fe0bcab4ee9226d524a28c9a60878878fbdcca8bb344fb6a10203010001'
public_e = '10001' #一般都是这个

#把16进制数据转整数
rsa_n = int(public_n,16)
rsa_e = int(public_e,16)
data = 'hello world'
print(rsa_encrypt(rsa_n,rsa_e,data))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS加密方式 的相关文章

  • 根据随机选择的列生成随机天数

    我有一个如下所示的数据框 感谢 SO 社区在以下方面提供的帮助 df1 pd DataFrame person id 11 11 12 13 14 date birth 01 01 1961 12 30 1961 05 29 1967 01
  • 多重处理:如何从子进程重定向标准输出?

    注意 我见过multiprocessing Process 的日志输出 https stackoverflow com questions 1501651 log output of multiprocessing process 不幸的是
  • 如何有条件地组合两个相同形状的 numpy 数组

    这听起来很简单 但我想我把它想得太复杂了 我想创建一个数组 其元素是从两个形状相同的源数组生成的 具体取决于源数组中哪个元素更大 为了显示 import numpy as np array1 np array 2 3 0 array2 np
  • 如何在算术表达式的结果上添加 SQLAlchemy 标签?

    我如何将这样的东西翻译成 SQLAlchemy select x y as difference 我知道该怎么做 x label foo 但我不确定在哪里放置下面的 label 方法调用 select table c x table c y
  • 对打开文件的脚本进行单元测试

    我编写了一个脚本 它打开一个文件 读取内容并进行一些操作和计算 并将它们存储在集合和字典中 我该如何为这样的事情编写单元测试 我的问题具体是 我会测试文件是否打开 文件很大 这是unix字典文件 我如何对计算进行单元测试 我真的必须手动计算
  • 返回不包括指定键的字典副本

    我想创建一个函数 返回字典的副本 不包括列表中指定的键 考虑这本词典 my dict keyA 1 keyB 2 keyC 3 致电without keys my dict keyB keyC 应该返回 keyA 1 我想用一行简洁的字典理
  • 基于 True/False 值的 Python 优雅赋值

    我想根据三个布尔值中的值设置一个变量 最直接的方法是 if 语句后跟一系列 elif if a and b and c name first elif a and b and not c name second elif a and not
  • pandas 两个数据框交叉连接[重复]

    这个问题在这里已经有答案了 我找不到有关交叉联接的任何内容 包括合并 联接或其他一些内容 我需要使用 my function 作为 myfunc 处理两个数据帧 相当于 for itemA in df1 iterrows for itemB
  • 使用reduce方法的斐波那契数列

    于是 我看到有人用reduce方法来计算斐波那契数列 这是他的想法 1 0 1 1 2 1 3 2 5 3 对应于 1 1 2 3 5 8 13 21 代码如下所示 def fib reduce n initial 1 0 dummy ra
  • 熊猫记忆

    我有冗长的计算 我重复了很多次 因此 我想使用记忆 诸如jug http packages python org Jug and joblib http packages python org joblib memory html 与Pan
  • 如何解码 dtype=numpy.string_ 的 numpy 数组?

    我需要使用 Python 3 解码按以下方式编码的字符串 gt gt gt s numpy asarray numpy string hello nworld gt gt gt s array b hello nworld dtype S1
  • 如何在python中递归复制目录并覆盖全部?

    我正在尝试复制 home myUser dir1 及其所有内容 及其内容等 home myuser dir2 在Python中 此外 我希望副本覆盖中的所有内容dir2 It looks like distutils dir util co
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • 如何将reportlab与Google应用程序引擎一起使用

    我无法在谷歌应用程序引擎下正确导入reportlab 根据以下guide http blog notdot net 2010 04 Generating PDFs on App Engine Python and introducing M
  • 使用 pandas 绘制带有误差线的条形图

    我正在尝试从 DataFrame 生成条形图 如下所示 Pre Post Measure1 0 4 1 9 这些值是我从其他地方计算出来的中值 我还有它们的方差和标准差 以及标准误差 我想将结果绘制为具有适当误差线的条形图 但指定多个误差值
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • scrapy python 请求未定义

    我在这里找到了答案 code for site in sites Link site xpath a href extract CompleteLink urlparse urljoin response url Link yield Re
  • Django - 缺少 1 个必需的位置参数:'request'

    我收到错误 get indiceComercioVarejista 缺少 1 个必需的位置参数 要求 当尝试访问 get indiceComercioVarejista 方法时 我不知道这是怎么回事 views from django ht
  • bool() 和operator.truth() 有什么区别?

    bool https docs python org 3 library functions html bool and operator truth https docs python org 3 library operator htm

随机推荐

  • hbuilder 格式化时 遇到花括号的代码会换行

    菜单 工具 插件配置 format jsbeautifyrc js 修改brace style 为collapse preserve inline 重启HBuilderX
  • 烟火识别算法技术概述

    烟火识别算法技术是一种基于计算机视觉和图像处理的先进技术 旨在自动识别和分析烟火的特征和属性 随着人们对烟火表演的需求不断增加 烟火识别算法技术的研究和应用也越来越受到关注 烟火识别算法技术主要包括图像预处理 特征提取 分类器训练和目标检测
  • C# 代码规范和质量检查工具 StyleCop.Analyzers

    简介 原来一直用 ReSharper 来进行代码质量检查 不过毕竟是收费的 所以想找个免费的可以推广给公司的同事也一起用 搜索了一下 找到了StyleCop 但是我在 VS 2015里安装 StyleCop 或者通过 Nuget 包安装 S
  • B1031 查验身份证 (15分)【C语言】

    B1031 查验身份证 15分 C语言 原题链接 用flag标记是否所有号码都正常 正常时为1 但凡有一个身份证号出错 就将flag置为0 题目描述 一个合法的身份证号码由17位地区 日期编号和顺序编号加1位校验码组成 校验码的计算规则如下
  • IIS的服务器搭建配置(详细)

    IIS的服务器搭建配置 1 windows服务器配置 1 1打开控制面板 1 2点击next 1 3增加web服务器 注意 这一块是重点 好家伙 我在这一块一开始不重视 浪费了我2个多小时在返工查 1 4点击next进入到Features栏
  • 无人机和乐高编程机器人哪个好

    无人机和乐高编程机器人哪个好 现在是人工智能的社会 越来越多的家长开始重视孩子的科技素质教育 于是很多的家长会给孩子选择一些能够与人工智能有关系的课程 而机器人编程就是其中一种 很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于无人
  • js截取字符串前几位或者截取字符串后几位

    经常会遇到后台反的时间是 2020 02 02 10 00 00 页面上需要只展示年月日或者只展示时分秒 那么最简单的方法就是返回过来的值直接截取一下即可 如何截取前几位 案例如下 var date 1996 10 22 22 55 33
  • TorchServe 详解:5 步将模型部署到生产环境

    内容导读 TorchServe 自 2020 年 4 月推出至今 经历了 2 年多的发展 变得愈发成熟和稳定 本文将对 TorchServe 进行全面介绍 本文首发自微信公众号 PyTorch开发者社区 更多应用 PyTorch 进行实际模
  • 深度学习------神经网络迁移学习

    迁移学习 import tensorflow as tf import IPython display as display import numpy as np import matplotlib pyplot as plt import
  • factoryBean.setTypeAliasesPackage()详解

    示例代码 Bean public SqlSessionFactoryBean sqlSessionFactory DataSource dataSource SqlSessionFactoryBean factoryBean new Sql
  • 阿里云短信发送接口实现

    使用阿里云短信接口发送验证码 1 引入依赖 springboot 工程引入web 引入 lombok 关键代码引入
  • 如何在iterm2中设置自动远程登录(附跳板机攻略)

    最近在mac中折腾ssh自动登录的问题 不自动登录每次输入命令太痛苦了 采取的方案是expect脚本的方式 其实选择这种方案而不是在远程服务器上保存key的方式主要是因为公司限制了在跳板机上保存私有数据的权限 如果想了解如何不输入密码登录远
  • 翁凯C语言作业7-1

    include
  • Linux常用命令_文件搜索命令

    文章目录 1 文件搜索命令find 2 其他搜索命令 2 1 文件搜索命令 locate 2 2 文件搜索命令 which 2 3 文件搜索命令 whereis 2 4 文件搜索命令 grep 1 文件搜索命令find 2 其他搜索命令 2
  • 数据集【NO.13】复杂场景下的鸟类检测数据集

    写在前面 数据集对应应用场景 不同的应用场景有不同的检测难点以及对应改进方法 本系列整理汇总领域内的数据集 方便大家下载数据集 若无法下载可关注后私信领取 关注免费领取整理好的数据集资料 今天分享一个非常好的非常小众的研究方向 有应用创新
  • 获取文件夹下所有的文件数量

    文件夹下所有的文件数量 param type url 文件链接 function shuLiang url 造一个方法 给一个参数 sl 0 造一个变量 让他默认值为0 arr glob url 把该路径下所有的文件存到一个数组里面 for
  • IDEA 中 MyBatis还可以这么玩!!!

    前言 1 搭建 MyBatis Generator 插件环境 a 添加插件依赖 pom xml b 配置文件 generatorConfig xml c 数据库配置文件 jdbc properties d 配置插件启动项 2 项目实战 a
  • C++网络编程Reactor模式介绍

    Reactor模式是一种事件驱动的设计模式 主要用于处理服务请求 这些请求在一开始并不知道何时会到达 它是一种非阻塞I O模式 可以处理大量并发连接 因此在网络编程中被广泛使用 Reactor模式的主要组件包括 Reactor 这是事件循环
  • 【TS第三讲】完善TS开发环境

    文章目录 写在前面 ts node nodemon nodemon文件类型 nodemon文件范围 写在最后 写在前面 探索TypeScript世界 驭Vue3 Ts潮流 开启前端之旅 欢迎来到前端技术的精彩世界 无论你是刚刚踏入编程大门的
  • JS加密方式

    常见加密方式 加密 前端 1 把加密的数据给后端 2 JS加密 3 携带正确的参数 进行加密 后端 存入数据库或者校验 为了反爬 前端请求就会进行携带指定的参数 参数的值会进行加密 后端再进行校验 1 MD5加密 概念 线型散列算法 签名算