当前位置: 首页 > news >正文

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

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

#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.mrgr.cn/news/3575.html

相关文章:

  • raster graphics是什么
  • Axure中跨页面动态面板状态设置的实现方法
  • 笨鸟先飞(疯狂的小鸟)小游戏自制分享
  • 一些常见的文件操作
  • SpringBoot(图书馆)自习室座位预约管理系统 - 附源码与配套论文
  • Win10将用户文件夹迁移到其它磁盘
  • 表格解析调研
  • 网络编程:OSI协议,TCP/IP协议,IP地址,UDP编程
  • jstack 使用经验笔记
  • 小阿轩yx-Kubernetes Pod入门
  • 【C++11】入门基础
  • leetcode_60. 排列序列
  • 一文学会用 Maven
  • 高性能内存对象缓存
  • Java 入门指南:集合概述
  • Spring中AnnotationConfigApplicationContext
  • Linux系统信息排查
  • Oracle23ai新特性FOR LOOP循环控制结构增强
  • 智能停车计费系统设计与实现_urqs9
  • 为BUG编程:头文件不一致导致的coredump