Python AES加密导入包
AES(Advanced Encryption Standard)是一种常用的对称加密算法,它使用相同的密钥进行加密和解密操作。在Python中,我们可以使用pycryptodome
包来实现AES加密。
导入pycryptodome
包
在开始使用pycryptodome
包之前,我们需要先安装该包。可以使用以下命令来安装:
pip install pycryptodome
安装完成后,我们可以在Python代码中导入该包:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
上面的代码中,AES
类用于创建AES加密和解密对象,get_random_bytes
函数用于生成随机字节。
AES加密
接下来,我们可以使用AES
类来进行AES加密。下面是一个示例:
def encrypt(plaintext, key):
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(plaintext.encode())
return cipher.nonce + tag + ciphertext
key = get_random_bytes(16)
plaintext = "Hello, world!"
encrypted_data = encrypt(plaintext, key)
print("Encrypted data:", encrypted_data)
在上面的代码中,encrypt
函数接受明文和密钥作为参数,使用AES.new
方法创建一个AES加密对象。然后,调用encrypt_and_digest
方法对明文进行加密,并得到密文和验证标签。最后,返回随机数、标签和密文的组合作为加密后的数据。
AES解密
解密与加密类似,我们可以使用AES
类来进行AES解密。下面是一个示例:
def decrypt(encrypted_data, key):
nonce = encrypted_data[:16]
tag = encrypted_data[16:32]
ciphertext = encrypted_data[32:]
cipher = AES.new(key, AES.MODE_EAX, nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
return plaintext.decode()
decrypted_data = decrypt(encrypted_data, key)
print("Decrypted data:", decrypted_data)
在上面的代码中,decrypt
函数接受加密后的数据和密钥作为参数,然后从加密后的数据中提取出随机数、标签和密文。接下来,使用AES.new
方法创建一个AES解密对象,并调用decrypt_and_verify
方法进行解密。最后,返回解密后的明文。
包关系图
下面是pycryptodome
包的包关系图:
erDiagram
style default
entity "pycryptodome" {
+ from Crypto.Cipher import AES
+ from Crypto.Random import get_random_bytes
}
序列图
下面是使用pycryptodome
包进行AES加密和解密的序列图:
sequenceDiagram
participant Client
participant Server
Client->>+Server: 发送明文数据
Server->>+Client: 生成随机密钥
Client->>+Server: 使用密钥加密数据
Server->>+Client: 使用密钥解密数据
在上面的序列图中,客户端首先向服务器发送明文数据。服务器生成一个随机密钥,并将其返回给客户端。客户端使用该密钥对数据进行加密,并将加密后的数据发送给服务器。服务器使用密钥对数据进行解密,并将解密后的数据返回给客户端。
总结
在本文中,我们介绍了如何使用pycryptodome
包进行AES加密和解密。通过导入AES
类和get_random_bytes
函数,我们可以使用AES
类创建AES加密和解密对象,并使用相同的密钥进行加密和解密操作。希望本文对您理解Python AES加密有所帮助。