[python][代码]定义了一个用于AES加密和解密的工具类

embedded/2024/9/25 4:22:32/

 这段Python代码定义了一个用于AES加密和解密的类 Encrypt,以及两个函数 encryptdecrypt,用于对内容进行加密和解密。

python">#coding:utf-8from Crypto.Cipher import AES
import base64
import urllib.parseclass Encrypt:def __init__(self, key, iv):self.key = key.encode('utf-8')# @staticmethoddef pkcs7padding(self, text):bs = 16length = len(text)bytes_length = len(text.encode('utf-8'))padding_size = length if (bytes_length == length) else bytes_lengthpadding = bs - padding_size % bspadding_text = chr(padding) * paddingself.coding = chr(padding)return text + padding_textdef aes_encrypt(self, content):cipher = AES.new(self.key, AES.MODE_ECB)content_padding = self.pkcs7padding(content)encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')return resultdef aes_decrypt(self, content):cryptor = AES.new(self.key, AES.MODE_ECB)plain_text = cryptor.decrypt(base64.b64decode(content))plain_text = plain_text.decode()padding_len = ord(plain_text[len(plain_text) - 1])plain_text = plain_text[0:-padding_len]return plain_textdef quote(self,content):return urllib.parse.quote(content, safe='/', encoding=None, errors=None)def encrypt(content):cpa = Encrypt("zhiyaoshigoufazajiuxing123456789", '1234567890123456')aespw = str(cpa.aes_encrypt(content));return aespwdef decrypt(content):cpa = Encrypt("zhiyaoshigoufazajiuxing123456789", '1234567890123456')aespw = str(cpa.aes_decrypt(content)).replace("",'').strip();return aespw
  1. 类定义:

    Encrypt 接受两个参数:keyiv。在AES加密中,iv(初始化向量)通常用于CBC模式,但在这个代码示例中,它并没有被使用,因为使用的是ECB模式。
  2. 初始化方法:

    __init__ 方法将传入的 key 转换为UTF-8编码的字节。
  3. 填充方法:

    pkcs7padding 方法实现了PKCS7填充算法,确保加密的文本长度是AES块大小(16字节)的整数倍。
  4. 加密方法:

    aes_encrypt 方法使用AES的ECB模式进行加密。首先对文本进行PKCS7填充,然后加密填充后的文本,并使用base64编码加密后的字节。
  5. 解密方法:

    aes_decrypt 方法使用AES的ECB模式进行解密。首先使用base64解码加密的文本,然后解密,最后去除填充。
  6. quote方法:

    quote 方法使用 urllib.parse.quote 对内容进行URL编码。
  7. 加密函数:

    encrypt 函数创建 Encrypt 类的实例,并调用 aes_encrypt 方法进行加密。
  8. 解密函数:

    decrypt 函数创建 Encrypt 类的实例,并调用 aes_decrypt 方法进行解密。解密后,使用 replace 方法去除可能存在的非法字符 "",并使用 strip 方法去除字符串两端的空白字符。

注意事项:

  • 代码中 Encrypt 类的构造函数中 iv 参数没有被使用,如果使用CBC模式,需要正确地使用 iv
  • 在实际应用中,硬编码密钥(如示例中的 key)是不安全的,应使用更安全的密钥管理方法。
  • 使用ECB模式加密相同的明文会产生相同的密文,这可能导致安全问题。建议使用CBC或其他更安全的模式。
  • 代码中的 quote 方法似乎没有在 encryptdecrypt 函数中使用,可能是为其他用途准备的。
  • 代码中的 decrypt 函数在去除非法字符时使用了特定的字符 "",这可能是由于编码问题导致的,实际使用时需要根据具体情况调整。


http://www.ppmy.cn/embedded/98209.html

相关文章

每天一个数据分析题(四百八十五)- 统计推断

假设检验中,关于p值说法正确的是? A. p值是在原假设成立时,样本观察结果发生的概率。 B. p值是接受原假设的概率 C. p值是相对样本统计量而言的 D. 用p值做决策比用域值做决策更准确 数据分析认证考试介绍:点击进入 题目来源…

ArcGIS简单介绍

ArcGIS体系结构 (1)GIS Server 宿主各种GIS资源,将他们封装为服务提供给客户端应用。GIS Server分为两部分:Server Object Manager(SOM)和Server Object Containers(SOCs)。一个SO…

《黑神话:悟空》Steam在线超111万 打破单人游戏在线纪录

据SteamDB统计,《黑神话:悟空》首发当天就迅速打破了业内记录,Steam同时在线峰值超过111万,来到111万4165人,而且还在增长中。这已经超越《赛博朋克2077》和《艾尔登法环》等游戏的历史最高同时在线记录,成…

Excel平均值与减法技巧

Excel中,表格怎么求平均值? 打开Excel,创建一个新的工作表或者打开需要操作的工作表。在需要计算平均值的单元格中,输入“AVERAGE (A1:A12)”。 这个函数的作用就是计算平均值。 其中A1代表A列第一个单元格,A12代表A列…

Thinkphp6框架 AI网址导航系统源码

最新的 thinkphp 6.1 开发的 AI 网址导航是一个非常实用的工具,它能够帮助用户方便地浏览和管理自己喜欢的网站。相比于其他的 AI 网址导航,这个项目使用了更加友好和易用的 ThinkPHP 框架进行搭建,使得开发者和用户都能够轻松上手。

gt接口RXCDRHOLD保持CDR控制循环冻结

RXCDRHOLD 保持CDR控制循环冻结 的功能主要是用于控制时钟数据恢复(CDR)电路的行为,特别是在需要固定CDR状态或进行特定测试时。以下是关于这一功能的详细解释: 功能概述 RXCDRHOLD信号是一个控制信号,用于保持CDR控制…

解决旧版CMS内容管理无法登录的问题

最近遇到了输入正确的账户密码,旧版的CMS内容管理的平台提示登录成功却无法跳转的问题 遇到这种情况请不要慌!!! 请按照下面的步骤解决问题: 1.点击账号管理 2.点击右上角的返回旧版控制台 3.点击cloud1环境 4.点击扩…

使用Python+os模块修改文件权限

一、os.chmod函数介绍 os.chmod(path, mode) 该函数参数的含义如下: (1) path: 要更改权限的文件或目录的路径。 (2) mode: 新的权限,可以使用八进制数来表示。 在类Unix系统(macOS、Linux等)中…