任务描述 本关任务:使用python包实现AES加解密,要求实现分组长度为128,密钥长度为128的ECB模式加解密。 相关知识 为了完成本关任务,你需要掌握:1.AES算法原理 2. 对称加密的ECB模式。 编程要求 根据提示,在右侧编辑器补充代码,输入明文和密钥,输出密文和解密后的明文。 测试说明 平台会对你编写的代码进行测试: 测试输入: plaintext1234567 1234567891234567 预期输出: b'e232fb646d5d820620ffa609ba56200a' b'plaintext1234567' 测试输入: 1234567891234567 plaintext1234567 预期输出: b'a49e9a7c354a9f64486b16e601fdccd7' b'1234567891234567' 开始你的任务吧,祝你成功! 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 07:33:40 浏览: 17
### Python实现AES ECB模式加解密(分组长度128位,密钥长度128位)
以下是一个完整的Python代码示例,用于实现AES ECB模式下的加密和解密功能。该代码支持分组长度为128位,密钥长度也为128位。
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
class AESUtil:
"""
AES工具类,采用ECB模式,分组长度和密钥长度均为128位。
"""
BLOCK_SIZE = 16 # 分组大小为128位,即16字节
@staticmethod
def encrypt(plain_text, key):
"""
使用AES-ECB模式对明文进行加密。
参数:
plain_text (str): 明文字符串
key (str): 长度为16字节的密钥
返回:
str: 经过Base64编码的密文
"""
cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
padded_data = pad(plain_text.encode('utf-8'), AESUtil.BLOCK_SIZE)
encrypted_bytes = cipher.encrypt(padded_data)
return base64.b64encode(encrypted_bytes).decode('utf-8')
@staticmethod
def decrypt(cipher_text, key):
"""
使用AES-ECB模式对密文进行解密。
参数:
cipher_text (str): Base64编码的密文字符串
key (str): 长度为16字节的密钥
返回:
str: 解密后的明文
"""
cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
decoded_cipher_text = base64.b64decode(cipher_text)
decrypted_padded_data = cipher.decrypt(decoded_cipher_text)
return unpad(decrypted_padded_data, AESUtil.BLOCK_SIZE).decode('utf-8')
if __name__ == "__main__":
# 测试用例
key = "1234567812345678" # 密钥长度为16字节
plaintext = "HelloWorld!" # 被加密的明文
# 加密过程
ciphertext = AESUtil.encrypt(plaintext, key)
print(f"加密后的密文: {ciphertext}")
# 解密过程
decrypted_text = AESUtil.decrypt(ciphertext, key)
print(f"解密后的明文: {decrypted_text}")
```
---
#### 实现细节解析
1. **库的选择**
上述代码依赖于`pycryptodome`库,这是一个强大的密码学库,提供了多种加密算法的支持。安装方式如下:
```bash
pip install pycryptodome
```
2. **分组长度与密钥长度**
AES标准定义了三种密钥长度:128位、192位和256位[^1]。本示例选择了128位密钥长度,对应的分组大小为128位(16字节)。
3. **填充机制**
AES要求输入数据的长度必须是分组大小的整数倍。如果不足,则需要进行填充。这里使用PKCS#7填充方案,由`Crypto.Util.Padding.pad`自动完成填充操作[^2]。解密时则通过`unpad`去除多余的填充字符。
4. **Base64编码**
由于AES加密的结果是二进制数据,不便于存储或传输,因此将其转换为Base64编码形式。这一步骤在实际应用中非常常见。
5. **ECB模式特点**
ECB模式是最简单的AES加密模式之一,它将每个分组独立加密,无需初始化向量(IV),但存在一定的安全隐患——相同的明文会产生相同的密文[^3]。
---
### 注意事项
尽管ECB模式易于理解和实现,但由于其缺乏随机化特性,在某些场景下可能不适合直接使用。例如,当需要保护敏感信息时,应考虑更安全的模式如CBC或GCM[^1]。
---
阅读全文
相关推荐
















