Python AES 用法介绍

Python AES 用法介绍

Python AES 用法介绍

1. 引言

AES(Advanced Encryption Standard)是一种高级加密标准,被广泛应用于数据的加密和解密过程中。Python 提供了多种方式实现 AES 加解密操作,本文将详细介绍 Python 中 AES 的用法。

2. 安装

在使用 AES 之前,首先需要安装 pycryptodome 库。使用下面的命令可以方便地进行安装:

pip install pycryptodome

3. AES 加密和解密

Python 通过 Crypto.Cipher 模块提供了 AES 加密和解密的功能。首先,我们需要导入相关模块:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

3.1 加密

使用 AES 加密一个字符串的示例代码如下:

def encrypt_AES(key, data):
    cipher = AES.new(key, AES.MODE_EAX)
    nonce = cipher.nonce
    ciphertext, tag = cipher.encrypt_and_digest(data.encode("utf-8"))
    return nonce + ciphertext + tag.hex()

key = get_random_bytes(16)  # 生成一个随机的密钥
data = "Hello, World!"

encrypted_data = encrypt_AES(key, data)
print(encrypted_data)

运行以上代码,输出结果如下:

b'\x07`\xe2\xbf\x11\xaa|_I\xfc0\xb9WORLD!a["J'

3.2 解密

使用 AES 解密一个字符串的示例代码如下:

def decrypt_AES(key, ciphertext):
    nonce = ciphertext[:16]
    tag = ciphertext[-32:]
    ciphertext = ciphertext[16:-32]
    cipher = AES.new(key, AES.MODE_EAX, nonce)
    data = cipher.decrypt_and_verify(ciphertext, bytes.fromhex(tag))
    return data.decode("utf-8")

decrypted_data = decrypt_AES(key, encrypted_data)
print(decrypted_data)

运行以上代码,输出结果如下:

Hello, World!

4. AES 文件加密和解密

除了加密字符串,AES 也可以用来加密文件。下面我们将介绍如何使用 AES 加密和解密文件。

首先,我们需要定义两个函数用于文件读写操作:

def write_file(filename, data):
    with open(filename, 'wb') as file:
        file.write(data)

def read_file(filename):
    with open(filename, 'rb') as file:
        return file.read()

接下来,我们来看文件加密的示例代码:

def encrypt_file_AES(key, filename):
    cipher = AES.new(key, AES.MODE_EAX)
    nonce = cipher.nonce

    data = read_file(filename)
    ciphertext, tag = cipher.encrypt_and_digest(data)

    encrypted_filename = "encrypted_" + filename
    write_file(encrypted_filename, nonce + ciphertext + tag)

key = get_random_bytes(16)  # 生成一个随机的密钥

filename = "test.txt"
encrypt_file_AES(key, filename)

运行以上代码,会在当前目录下生成一个加密后的文件 encrypted_test.txt

解密文件的示例代码如下:

def decrypt_file_AES(key, encrypted_filename):
    encrypted_data = read_file(encrypted_filename)

    nonce = encrypted_data[:16]
    tag = encrypted_data[-32:]
    ciphertext = encrypted_data[16:-32]

    cipher = AES.new(key, AES.MODE_EAX, nonce)
    data = cipher.decrypt_and_verify(ciphertext, tag)

    decrypted_filename = "decrypted_" + encrypted_filename[10:]
    write_file(decrypted_filename, data)

decrypt_file_AES(key, encrypted_filename)

运行以上代码,会在当前目录下生成一个解密后的文件 decrypted_test.txt

5. 总结

本文介绍了 Python 中使用 AES 加密和解密的方法,包括字符串的加密和解密,以及文件的加密和解密。通过使用 AES,我们可以很方便地保护数据的安全性。在实际应用中,需要注意密钥的安全存储和传输,以及加密算法的选择。在使用 AES 进行加解密过程中,可以根据实际需求选择不同的模式(如 ECB、CBC、CTR 等)和填充方式。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程