python aes加密解密
时间: 2023-08-31 21:39:38 浏览: 141
### 回答1:
好的,下面是Python中使用AES加密和解密的示例代码:
```python
from Crypto.Cipher import AES
import base64
# 加密函数
def encrypt(text, key):
# 密钥长度必须为16(AES-128)、24(AES-192)或32(AES-256)Bytes长度
key = key.encode('utf-8')
text = text.encode('utf-8')
iv = b'0000000000000000' # 16 Bytes的初始化向量(IV)
mode = AES.MODE_CBC
cipher = AES.new(key, mode, iv)
# 加密函数要求明文长度必须为16的倍数,因此需要进行补位操作
length = 16
count = len(text)
if count % length != 0:
add = length - (count % length)
else:
add = 0
text = text + (b'\0' * add)
ciphertext = cipher.encrypt(text)
# base64编码返回
return base64.b64encode(ciphertext)
# 解密函数
def decrypt(text, key):
key = key.encode('utf-8')
iv = b'0000000000000000' # 16 Bytes的初始化向量(IV)
mode = AES.MODE_CBC
cipher = AES.new(key, mode, iv)
# base64解码
text = base64.b64decode(text)
plaintext = cipher.decrypt(text)
# 去除补位
return plaintext.rstrip(b'\0').decode('utf-8')
# 测试
text = '这是一个测试文本'
key = '1234567890123456'
encrypt_text = encrypt(text, key)
print('加密后的文本:', encrypt_text)
decrypt_text = decrypt(encrypt_text, key)
print('解密后的文本:', decrypt_text)
```
需要注意的是,加密函数和解密函数中的密钥必须相同,否则无法正确解密。同时,在加密函数中,需要进行补位操作,以保证明文长度为16的倍数,这是由于AES加密算法的要求。
### 回答2:
Python AES加密解密是一种使用AES算法进行数据加密和解密的方法。AES(Advanced Encryption Standard)是一种对称加密算法,常用于对敏感数据进行保护。下面是一个简单的示例代码,演示了如何使用Python进行AES加密和解密:
```python
from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import pad, unpad
from base64 import b64encode, b64decode
# 设置密钥和初始化向量
key = b'secret_key_16Bytes'
iv = b'initial_vector_16'
# 加密函数
def encrypt(plaintext):
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))
return b64encode(ciphertext).decode('utf-8')
# 解密函数
def decrypt(ciphertext):
cipher = AES.new(key, AES.MODE_CBC, iv)
decryptedtext = unpad(cipher.decrypt(b64decode(ciphertext)), AES.block_size)
return decryptedtext.decode('utf-8')
# 测试加密解密
plaintext = 'Hello, AES!'
ciphertext = encrypt(plaintext)
decryptedtext = decrypt(ciphertext)
print('明文:', plaintext)
print('密文:', ciphertext)
print('解密后:', decryptedtext)
```
在上述代码中,我们首先导入了`Cryptodome`模块(安装:`pip install pycryptodomex`)和`base64`模块。然后,我们设置了密钥和初始化向量(必须是16字节)。接下来,定义了`encrypt`函数和`decrypt`函数,分别用于加密和解密数据。最后,我们通过测试输入一个明文,然后进行加密和解密,最终输出加密后的密文和解密后的明文。
需要注意的是,使用AES进行加密和解密时,密钥和初始化向量必须一致,否则无法正确解密。同时,为了保证数据的长度是16字节的倍数,我们使用了`Cryptodome.Util.Padding`模块中的`pad`和`unpad`函数进行填充和去填充操作。此外,在加密前,我们还将密文进行了base64编码,并在解密后进行了base64解码。
阅读全文