使用python包实现AES加解密,要求实现分组长度为128,密钥长度为128的ECB模式加解密。补充代码,输入明文和密钥,输出密文和解密后的明文。测试输入: zhang123456789ab keyskeyskeyskeys预期输出b'c585c5724fec1438e4ecaf91de121e29' b'zhang123456789ab'测试输入: plaintext1234567 1234567891234567预期输出b'e232fb646d5d820620ffa609ba56200a' b'plaintext1234567' 补充代码from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex #ECB模式 class aestest(): #***********Begin************** #************End*************** def Evidence(text,key): # 要求key长度为16 aes = aestest(key) enc = aes.encrypt(text) print(enc) detext = aes.decrypt(enc) print(detext)
时间: 2025-05-27 17:34:14 浏览: 20
### Python中AES ECB模式加解密实现
以下是基于Python `pycryptodome` 库(原名为PyCrypto,已被废弃并建议迁移到PyCryptodome)实现的AES加密和解密代码示例。该示例使用ECB模式、128位分组长度和128位密钥长度。
#### 加密函数
```python
from Crypto.Cipher import AES
import base64
def pad(text):
# 填充至16字节倍数
while len(text) % 16 != 0:
text += b'\0'
return text
def encrypt_aes_ecb(plain_text, key):
# 将明文转换为字节数组
plain_text_bytes = plain_text.encode('utf-8')
padded_plain_text = pad(plain_text_bytes)
# 创建AES对象,指定ECB模式
cipher = AES.new(key, AES.MODE_ECB)
# 执行加密操作
encrypted_data = cipher.encrypt(padded_plain_text)
return base64.b64encode(encrypted_data).decode('utf-8') # 返回Base64编码后的字符串
```
#### 解密函数
```python
def unpad(text):
# 移除填充字符
return text.rstrip(b'\0')
def decrypt_aes_ecb(cipher_text, key):
# Base64解码密文
cipher_text_bytes = base64.b64decode(cipher_text)
# 创建AES对象,指定ECB模式
cipher = AES.new(key, AES.MODE_ECB)
# 执行解密操作
decrypted_padded_data = cipher.decrypt(cipher_text_bytes)
unpadded_decrypted_data = unpad(decrypted_padded_data)
return unpadded_decrypted_data.decode('utf-8') # 转换回原始字符串
```
#### 测试代码
```python
if __name__ == "__main__":
# 定义128位密钥(16字节)
key = b'abcdefghijklmnop'
# 待加密的明文
plain_text = "This is a secret message"
# 加密过程
encrypted_message = encrypt_aes_ecb(plain_text, key)
print(f"Encrypted Message: {encrypted_message}")
# 解密过程
decrypted_message = decrypt_aes_ecb(encrypted_message, key)
print(f"Decrypted Message: {decrypted_message}")
```
以上代码实现了完整的AES ECB模式加解密功能[^1]。需要注意的是,在实际应用中不推荐使用ECB模式,因为它缺乏安全性,容易暴露数据模式[^3]。如果可能,请考虑更安全的CBC或其他模式,并配合随机化的初始化向量(IV)以增强安全性[^2]。
---
阅读全文
相关推荐

















