您的位置:首页 > 健康 > 养生 > bilibili官网网页入口_什么是搜索引擎竞价推广_微博营销推广策划方案_长沙优化科技

bilibili官网网页入口_什么是搜索引擎竞价推广_微博营销推广策划方案_长沙优化科技

2024/12/24 1:41:22 来源:https://blog.csdn.net/xiao_a_lian/article/details/143028982  浏览:    关键词:bilibili官网网页入口_什么是搜索引擎竞价推广_微博营销推广策划方案_长沙优化科技
bilibili官网网页入口_什么是搜索引擎竞价推广_微博营销推广策划方案_长沙优化科技

若已熟悉流程,可直接跳至最后

1. AES加密是什么

AES是一种对称加密(加密和解密用的同一种秘钥)

在进行js逆向时,我们经常会遇到请求参数加密 / 响应数据加密,其中有些网站的数据加密就是通过AES这种加密形式来做的。

2. Python中如何使用AES

2.1 安装模块

pip install pycryptodome

2.2 使用流程(加密)

生成秘钥

AES中所支持的秘钥格式:

  • 128位密钥(16字节)
  • 192位密钥(24字节)
  • 256位密钥(32字节)

也就是说,我们的这个秘钥大小必须得是以上三种的任何一种。

这里演示使用16字节的:

包括了秘钥key偏移量

key = '0123456789abcdef'.encode()  # 秘钥: 因为aes-128模式,所以必须16字节
iv = b'abcdabcdabcdabcd'  # 偏移量:因为aes-128模式,所以必须16字节

初始化

首先需要选定好加密模式

常见的加密模式有以下两种:

    ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
    CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。

我们这里采用CBC的模式

from Crypto.Cipher import AES
aes = AES.new(key, AES.MODE_CBC, iv)  # 创建一个aes对象

加密内容

因为这里采用的是128位秘钥,也就是16字节,所以你的加密内容也应该是16的倍数

from Crypto.Util.Padding import padtext = pad(text.encode(), 16)   # 补充为16的倍数en_text = aes.encrypt(text)  # 加密明文

编码

由于最后通过加密的数据是而紧凑,在后续不方便进行传输(包含不可打印数据),所以最终转为base64的编码:

import base64
en_text = base64.b64encode(en_text).decode()  # 将返回的字节型数据转进行base64编码

2.3  解密

解密其实是差不多的逻辑,将base64解码为字节流,然后通过key和iv进行解密,这里不在赘述。

下面给出我自己封装好的一个类:

3. AES封装类

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64class AESClass:def __init__(self, key, iv):self.key = key.encode()   # 秘钥self.iv = iv.encode()   # 偏移量def encryption(self, text):"""加密:param test: 需要加密的内容:return:"""text = pad(text.encode(), 16)aes = AES.new(self.key, AES.MODE_CBC, self.iv)  # 创建一个aes对象en_text = aes.encrypt(text)  # 加密明文en_text = base64.b64encode(en_text).decode()  # 将返回的字节型数据转进行base64编码return en_textdef decryption(self, text):"""解密:param text: 密文:return:"""aes = AES.new(self.key, AES.MODE_CBC, self.iv)text = text.encode()  # 需要解密的文本ecrypted_base64 = base64.b64decode(text)  # base64解码成字节流source = aes.decrypt(ecrypted_base64)  # 解密return unpad(source, 16).decode()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com