python aes加密解密
时间: 2023-09-26 08:06:44 浏览: 225
### 回答1:
下面是Python中使用AES加密和解密的示例代码:
```python
from Crypto.Cipher import AES
import base64
# 加密函数
def encrypt(text, key):
# 将key转换为16位二进制字符串
key = key.encode('utf-8')
key = AES.new(key, AES.MODE_ECB).encrypt(b'0000000000000000')
# 将文本转换为16位二进制字符串
text = text.encode('utf-8')
text_length = len(text)
add = 16 - (text_length % 16)
text = text + (b'\0' * add)
# 加密
cryptor = AES.new(key, AES.MODE_ECB)
ciphertext = cryptor.encrypt(text)
# 转换为base64编码
return base64.b64encode(ciphertext).decode('utf-8')
# 解密函数
def decrypt(ciphertext, key):
# 将key转换为16位二进制字符串
key = key.encode('utf-8')
key = AES.new(key, AES.MODE_ECB).encrypt(b'0000000000000000')
# 将密文先转换为二进制字符串,再解码为字节数组
ciphertext = base64.b64decode(ciphertext.encode('utf-8'))
# 解密
cryptor = AES.new(key, AES.MODE_ECB)
text = cryptor.decrypt(ciphertext).decode('utf-8')
# 去除末尾的'\0'
return text.rstrip('\0')
# 示例
key = '1234567890123456'
text = 'Hello, world!'
ciphertext = encrypt(text, key)
print('加密后:', ciphertext)
plaintext = decrypt(ciphertext, key)
print('解密后:', plaintext)
```
注意:上面示例代码中使用的是AES的ECB模式,这种模式不安全,容易被攻击,实际应用中应该使用更安全的模式,比如CBC模式。另外,上面代码中的key和text都是字符串形式,如果需要加密二进制数据,应该将其转换为字节数组。
### 回答2:
Python中实现AES加密解密主要依赖于第三方库`pycryptodome`。首先需要在Python环境中安装这个库。
在使用AES加密解密之前,需要先了解一些基本概念。AES(Advanced Encryption Standard)是一种对称加密算法,使用相同的密钥进行加密和解密。
下面是一个使用AES加密解密的示例代码:
```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
# 密钥
key = get_random_bytes(16)
# 要加密的数据
data = b"Hello World"
# 创建AES加密对象
cipher = AES.new(key, AES.MODE_ECB)
# 加密数据
ciphertext = cipher.encrypt(pad(data, AES.block_size))
print("加密后的数据:", ciphertext)
# 创建AES解密对象
decipher = AES.new(key, AES.MODE_ECB)
# 解密数据
decrypted_data = unpad(decipher.decrypt(ciphertext), AES.block_size)
print("解密后的数据:", decrypted_data)
```
在上面的代码中,首先使用`get_random_bytes`生成一个长度为16字节的密钥。然后,将要加密的数据使用`pad`方法进行填充,以适应AES加密算法所要求的块大小。接着,使用`AES.new`方法创建AES加密对象,并使用密钥进行初始化。调用`encrypt`方法对数据进行加密,并打印加密后的结果。
接下来,创建AES解密对象,使用相同的密钥进行初始化。调用`decrypt`方法对加密的数据进行解密,并使用`unpad`方法去除填充。最后,打印解密后的结果。
需要注意的是,在实际使用中,可以根据需要选择适当的模式(如ECB、CBC等)、填充方式(如PKCS7、ZeroPadding等)和密钥长度(如16字节、32字节等)。
以上就是用Python实现AES加密解密的简单示例。通过调用`pycryptodome`库中的相关方法,我们可以轻松地实现对数据进行AES加密和解密操作。
阅读全文