from Crypto.Cipher import AES from Crypto.Util.Padding import pad def aes_encrypt(plaintext, key): # AES 密钥长度必须为 16、24 或 32 字节 if len(key) not in [16, 24, 32]: # 对密钥长度不足 16 字节的情况进行填充 if len(key) < 16: key = key.ljust(16, '\0') elif 16 < len(key) < 24: key = key.ljust(24, '\0') elif 24 < len(key) < 32: key = key.ljust(32, '\0') key = key[:32] # 确保密钥长度不超过 32 字节 key = key.encode() plaintext = plaintext.encode() # 创建 AES 加密器对象,使用 ECB 模式 cipher = AES.new(key, AES.MODE_ECB) # AES 要求明文长度是 16 字节的倍数,对明文进行填充 padded_plaintext = pad(plaintext, AES.block_size) # 执行加密操作 ciphertext = cipher.encrypt(padded_plaintext) return ciphertext.hex() if __name__ == "__main__": try: plaintext = input("请输入要加密的明文: ") key = input("请输入 AES 密钥(会自动处理到 16、24 或 32 字节): ") encrypted_text = aes_encrypt(plaintext, key) print("明文:", plaintext) print("密文:", encrypted_text) except Exception as e: print(f"加密过程中出现错误: {e}")
时间: 2025-03-10 16:05:28 浏览: 110
### 使用PyCryptodome库实现AES加密
安装`pycryptodome`之后,在Python脚本中可以利用该库来执行数据的加解密操作[^1]。
下面是一个使用PyCryptodome库进行AES加密的具体实例:
```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
def encrypt_data(data, key):
cipher = AES.new(key, AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))
iv = cipher.iv
return iv.hex() + ':' + ct_bytes.hex()
key = get_random_bytes(32) # AES-256 requires a 32-byte key.
data_to_encrypt = 'This is just an example.'
encrypted_result = encrypt_data(data_to_encrypt, key)
print(f'Encrypted data: {encrypted_result}')
```
此代码片段展示了如何创建一个新的AES对象并指定工作模式为CBC(Cipher Block Chaining)。为了确保消息长度适合AES处理,应用了PKCS7填充方案。此外,初始化向量(`iv`)被转换成十六进制字符串并与密文一起返回以便后续解码过程能够获取必要的参数[^4]。
对于大文件而言,逐块读取和加密会更加高效而不是一次性加载整个文件到内存中完成全部加密流程[^2]。
阅读全文
相关推荐


















