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

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

#coding:utf-8

from Crypto.Cipher import AES
import base64
import urllib.parse

class Encrypt:
    def __init__(self, key, iv):
        self.key = key.encode('utf-8')

    # @staticmethod
    def pkcs7padding(self, text):
        bs = 16
        length = len(text)
        bytes_length = len(text.encode('utf-8'))
        padding_size = length if (bytes_length == length) else bytes_length
        padding = bs - padding_size % bs
        padding_text = chr(padding) * padding
        self.coding = chr(padding)
        return text + padding_text

    def 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 result

    def 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_text

    def 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 aespw

def 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 函数在去除非法字符时使用了特定的字符 "",这可能是由于编码问题导致的,实际使用时需要根据具体情况调整。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

awonw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值