欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > [python][代码]定义了一个用于AES加密和解密的工具类

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

2024/12/28 10:03:56 来源:https://blog.csdn.net/awonw/article/details/141369279  浏览:    关键词:[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 函数在去除非法字符时使用了特定的字符 "",这可能是由于编码问题导致的,实际使用时需要根据具体情况调整。

版权声明:

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

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