这段Python代码定义了一个用于AES加密和解密的类 Encrypt
,以及两个函数 encrypt
和 decrypt
,用于对内容进行加密和解密。
#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
-
类定义:
类Encrypt
接受两个参数:key
和iv
。在AES加密中,iv
(初始化向量)通常用于CBC模式,但在这个代码示例中,它并没有被使用,因为使用的是ECB模式。 -
初始化方法:
__init__
方法将传入的key
转换为UTF-8编码的字节。 -
填充方法:
pkcs7padding
方法实现了PKCS7填充算法,确保加密的文本长度是AES块大小(16字节)的整数倍。 -
加密方法:
aes_encrypt
方法使用AES的ECB模式进行加密。首先对文本进行PKCS7填充,然后加密填充后的文本,并使用base64编码加密后的字节。 -
解密方法:
aes_decrypt
方法使用AES的ECB模式进行解密。首先使用base64解码加密的文本,然后解密,最后去除填充。 -
quote方法:
quote
方法使用urllib.parse.quote
对内容进行URL编码。 -
加密函数:
encrypt
函数创建Encrypt
类的实例,并调用aes_encrypt
方法进行加密。 -
解密函数:
decrypt
函数创建Encrypt
类的实例,并调用aes_decrypt
方法进行解密。解密后,使用replace
方法去除可能存在的非法字符""
,并使用strip
方法去除字符串两端的空白字符。
注意事项:
- 代码中
Encrypt
类的构造函数中iv
参数没有被使用,如果使用CBC模式,需要正确地使用iv
。 - 在实际应用中,硬编码密钥(如示例中的
key
)是不安全的,应使用更安全的密钥管理方法。 - 使用ECB模式加密相同的明文会产生相同的密文,这可能导致安全问题。建议使用CBC或其他更安全的模式。
- 代码中的
quote
方法似乎没有在encrypt
或decrypt
函数中使用,可能是为其他用途准备的。 - 代码中的
decrypt
函数在去除非法字符时使用了特定的字符""
,这可能是由于编码问题导致的,实际使用时需要根据具体情况调整。