from common.encrypt_tools.aes_tool import AESTool class EncryptionDataConversion: def __init__(self): pass @staticmethod def plaint_to_cipher(data: str, aes_key: str): """ 加密 """ return AESTool(aes_key).encrypt_ecb_pad(data) @staticmethod def cipher_to_plaint(data: str, aes_key: str): """ 解密 """ return AESTool(aes_key).decrypt_ecb_pad(data)
时间: 2025-06-21 15:20:00 浏览: 9
<think>好的,我现在需要帮助用户展示如何使用Python的AES ECB模式对字符串进行加密和解密。首先,我需要回忆一下AES的基本知识。AES是一种对称加密算法,ECB模式是最简单的加密模式,每个块独立加密,不需要初始化向量(IV)。不过ECB的安全性较低,因为相同的明文块会加密成相同的密文块,容易受到攻击,所以一般推荐使用CBC等其他模式。但用户明确要求ECB,所以得按这个来。
接下来,我需要确定用户的需求。他们想要一个示例代码,使用AESTool类来进行字符串的加密和解密。根据用户提供的引用,他们可能参考了pycryptodome库,因为引用[1]提到了pycrypto和pycryptodome的实例。而pycrypto已经不再维护,所以应该推荐使用pycryptodome。
首先,安装pycryptodome库。用户可能需要先安装,所以代码示例前应该提醒他们安装。然后,处理加密解密的步骤。AES ECB模式需要密钥长度是16、24或32字节(对应128、192、256位)。所以需要确保用户提供的密钥符合这个要求,或者自动处理密钥长度,比如使用哈希函数生成固定长度的密钥。
然后,处理明文。加密前需要将字符串编码为字节,并且填充到块大小的倍数。AES块大小是16字节,所以如果明文不是16的倍数,需要填充。常用的填充方式是PKCS7。在加密时添加填充,解密后去除填充。例如,使用pad和unpad函数。
接下来,编写AESTool类。类应该包含初始化方法,接受密钥,可能自动处理密钥长度。然后有加密和解密的方法。加密方法中,使用AES.new创建cipher对象,模式为ECB,然后加密并返回密文。解密时同样创建cipher对象,解密并去除填充。
需要注意的是,ECB模式不需要IV,所以代码中不需要处理IV的部分。另外,密钥的处理可能需要将字符串转换为字节,如果用户传入的是字符串,可能需要使用哈希函数(如SHA256)生成固定长度的密钥。例如,将用户输入的密钥字符串进行哈希,取前16/24/32字节作为密钥,这样即使密钥长度不足,也能生成合适的长度。
然后,编写示例代码。用户可能需要一个完整的示例,包括生成密钥、加密和解密的步骤。例如,密钥如果由用户提供,需要检查长度,或者自动生成。或者,使用一个固定的密钥字符串,并通过处理生成合适的密钥。
另外,要考虑字符串编码,比如使用UTF-8。加密后的密文通常是字节,为了存储或传输,可以将其用base64编码转换为字符串。所以在加密后,将密文字节进行base64编码,解密时先base64解码再解密。
现在,整合这些步骤到代码中。AESTool类应该处理密钥生成、填充、加密、解密、编码和解码。然后,提供一个使用示例,展示如何加密和解密字符串。
可能的问题点:密钥处理是否正确,填充是否正确添加和去除,base64编码是否正确应用,以及异常处理是否到位。例如,如果用户提供的密钥长度不符合要求,如何处理?可能需要抛出异常或自动处理。
最后,根据用户提供的引用,引用[1]和[2]提到了pycryptodome的使用,所以代码示例应该基于这个库。同时,引用[3]提到RSA加密时的分段问题,虽然这里无关,但需要注意AES ECB模式是否支持长字符串,实际上AES处理是分块进行的,只要正确填充,库会自动处理。
总结步骤:
1. 安装pycryptodome库。
2. 导入必要的模块:AES、pad、unpad、base64。
3. 创建AESTool类,处理密钥生成、加密、解密。
4. 在加密方法中,填充明文,加密,base64编码。
5. 在解密方法中,base64解码,解密,去除填充。
6. 提供示例代码,展示使用过程。
测试示例代码是否可行,比如密钥用"mysecretpassword",虽然长度可能不够,所以需要用SHA256哈希生成32字节的密钥。例如,使用SHA256哈希用户提供的密钥字符串,然后取前32字节作为AES-256的密钥。
这样,示例代码应该能正确运行,加密和解密字符串。</think>以下是用Python实现AES-ECB模式字符串加密解密的示例代码,基于`pycryptodome`库实现:
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
import hashlib
class AESTool:
def __init__(self, key: str):
# 通过SHA256哈希生成固定32字节密钥(AES-256)
self.key = hashlib.sha256(key.encode()).digest()
def encrypt(self, plain_text: str) -> str:
cipher = AES.new(self.key, AES.MODE_ECB)
padded_data = pad(plain_text.encode(), AES.block_size)
encrypted_bytes = cipher.encrypt(padded_data)
return base64.b64encode(encrypted_bytes).decode()
def decrypt(self, encrypted_text: str) -> str:
cipher = AES.new(self.key, AES.MODE_ECB)
encrypted_bytes = base64.b64decode(encrypted_text)
decrypted_data = cipher.decrypt(encrypted_bytes)
return unpad(decrypted_data, AES.block_size).decode()
# 使用示例
if __name__ == "__main__":
# 初始化工具(密码任意长度)
aes = AESTool("mysecretpassword")
# 加密示例
original = "Hello, AES-ECB!"
encrypted = aes.encrypt(original)
print("加密结果:", encrypted)
# 解密示例
decrypted = aes.decrypt(encrypted)
print("解密结果:", decrypted)
```
### 代码说明
1. **密钥处理**:通过SHA256哈希将任意长度密码转换为32字节密钥(支持AES-256),确保符合密钥长度要求[^1]
2. **加密流程**:
- 明文编码为字节后执行PKCS7填充
- AES-ECB模式加密
- 结果进行Base64编码输出字符串
3. **解密流程**:
- Base64解码获得密文字节
- AES-ECB模式解密
- 去除填充后解码为字符串
### 注意事项
- ECB模式不建议用于敏感数据加密,相同明文会生成相同密文[^2]
- 示例中使用AES-256(32字节密钥),可修改哈希方式支持AES-128/AES-192
- 需安装依赖库:`pip install pycryptodome`
阅读全文
相关推荐

















