在AES加密前,可以对特殊字符进行URL编码或Base64编码,然后再进行加密处理。例如:
import base64
from Crypto.Cipher import AES
import urllib.parse
# 原始数据
data = 'Hello, world!@#$%^&*()'
# URL编码后的数据
url_data = urllib.parse.quote(data)
# Base64编码后的数据
base64_data = base64.b64encode(data.encode('utf-8')).decode('utf-8')
# 加密密钥
key = b'this_is_a_secret_key'
# 指定加密模式和填充方式
cipher = AES.new(key, AES.MODE_ECB, b'0' * 16)
# 对URL编码后的数据进行加密
url_data_encrypt = cipher.encrypt(url_data.encode('utf-8'))
# 对Base64编码后的数据进行加密
base64_data_encrypt = cipher.encrypt(base64_data.encode('utf-8'))
值得注意的是,对数据进行编码后,需要在进行解密操作前先进行解码。例如:
# 对URL编码后的数据进行解密
url_data_decrypt = cipher.decrypt(url_data_encrypt)
url_data_decrypt = urllib.parse.unquote(url_data_decrypt.decode('utf-8'))
# 对Base64编码后的数据进行解密
base64_data_decrypt = cipher.decrypt(base64_data_encrypt)
base64_data_decrypt = base64.b64decode(base64_data_decrypt).decode('utf-8')