AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准技术研究所(NIST)制定。

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准技术研究所(NIST)制定。

AES加密基本原理

AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准技术研究所(NIST)制定。AES算法使用密钥对数据进行加密和解密,同一密钥用于加密和解密过程。AES支持三种不同的密钥长度:128位、192位和256位。

pycryptodome模块安装

首先,你需要安装pycryptodome模块。你可以使用pip来安装:

pip install pycryptodome

Python代码示例

下面是一个简单的Python代码示例,展示了如何使用pycryptodome模块中的AES类进行数据加密和解密:

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
import os

# AES密钥(16字节,即128位)
key = get_random_bytes(16)

# 待加密的明文(需要是16字节的倍数,如果不是则进行填充)
plaintext = b"This is a secret message."
plaintext = pad(plaintext, AES.block_size)

# 初始化AES加密器
cipher = AES.new(key, AES.MODE_ECB)  # 注意:ECB模式不安全,仅用于示例

# 加密
ciphertext = cipher.encrypt(plaintext)

# 初始化AES解密器(使用相同的密钥)
decipher = AES.new(key, AES.MODE_ECB)

# 解密
decryptedtext = decipher.decrypt(ciphertext)
decryptedtext = unpad(decryptedtext, AES.block_size)

# 输出结果
print("Key:", key.hex())
print("Plaintext:", plaintext.hex())
print("Ciphertext:", ciphertext.hex())
print("Decrypted text:", decryptedtext.decode())

代码解释

  1. 导入必要的模块和函数
* `from Crypto.Cipher import AES`:从`pycryptodome`库中导入`AES`类,用于创建加密器和解密器。
* `from Crypto.Util.Padding import pad, unpad`:导入填充和去填充函数,因为AES算法要求输入数据是块大小的整数倍(对于AES,块大小是16字节)。
* `from Crypto.Random import get_random_bytes`:导入一个函数,用于生成随机字节,通常用作加密密钥。
* `import os`:虽然在这个示例中没有直接使用`os`模块,但在实际应用中,你可能需要它来读取文件、处理路径等。
  1. 生成AES密钥
* 使用`get_random_bytes(16)`生成一个随机的16字节(128位)密钥。在实际应用中,密钥的生成和管理是非常重要的,应该遵循最佳的安全实践。
  1. 准备待加密的明文
* 定义一个待加密的明文字符串,并将其转换为字节串(使用`b""`前缀)。
* 由于AES要求输入数据是块大小的整数倍,因此使用`pad`函数对明文进行填充。填充后的数据长度将是16字节的整数倍。
  1. 初始化AES加密器
* 使用`AES.new()`函数创建一个新的AES加密器对象。需要传入密钥和加密模式作为参数。在这个示例中,我们使用了ECB(Electronic Codebook)模式,但请注意,ECB模式在安全性方面存在一些问题,因为它不提供块之间的任何链接。在实际应用中,建议使用更安全的模式,如CBC(Cipher Block Chaining)或CTR(Counter with CBC-MAC)。
  1. 加密
* 使用加密器的`encrypt()`方法对填充后的明文进行加密,得到密文。
  1. 初始化AES解密器
* 与加密过程类似,使用相同的密钥和加密模式(在这种情况下是ECB)创建一个新的AES解密器对象。
  1. 解密
* 使用解密器的`decrypt()`方法对密文进行解密,得到解密后的字节串。
* 由于解密后的数据可能包含填充字节,因此使用`unpad`函数去除这些填充字节。
  1. 输出结果
* 打印密钥、明文、密文和解密后的文本。注意,密钥以十六进制形式打印,以便更容易阅读。明文和密文也以十六进制

处理结果:

AES加密基本原理

AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准技术研究所(NIST)制定。AES算法使用密钥对数据进行加密和解密,同一密钥用于加密和解密过程。AES支持三种不同的密钥长度:128位、192位和256位。

pycryptodome模块安装

首先,你需要安装pycryptodome模块。你可以使用pip来安装:
bash 下面是一个简单的Python代码示例,展示了如何使用`pycryptodome`模块中的`AES`类进行数据加密和解密:python

AES密钥(16字节,即128位)

待加密的明文(需要是16字节的倍数,如果不是则进行填充)

初始化AES加密器

加密

初始化AES解密器(使用相同的密钥)

解密

输出结果

  1. 导入必要的模块和函数
  • from Crypto.Cipher import AES:从pycryptodome库中导入AES类,用于创建加密器和解密器。
  • from Crypto.Util.Padding import pad, unpad:导入填充和去填充函数,因为AES算法要求输入数据是块大小的整数倍(对于AES,块大小是16字节)。
  • from Crypto.Random import get_random_bytes:导入一个函数,用于生成随机字节,通常用作加密密钥。
  • import os:虽然在这个示例中没有直接使用os模块,但在实际应用中,你可能需要它来读取文件、处理路径等。
    生成AES密钥
  • 使用get_random_bytes(16)生成一个随机的16字节(128位)密钥。在实际应用中,密钥的生成和管理是非常重要的,应该遵循最佳的安全实践。
    准备待加密的明文
  • 定义一个待加密的明文字符串,并将其转换为字节串(使用b""前缀)。
  • 由于AES要求输入数据是块大小的整数倍,因此使用pad函数对明文进行填充。填充后的数据长度将是16字节的整数倍。
    初始化AES加密器
  • 使用AES.new()函数创建一个新的AES加密器对象。需要传入密钥和加密模式作为参数。在这个示例中,我们使用了ECB(Electronic Codebook)模式,但请注意,ECB模式在安全性方面存在一些问题,因为它不提供块之间的任何链接。在实际应用中,建议使用更安全的模式,如CBC(Cipher Block Chaining)或CTR(Counter with CBC-MAC)。
    加密
  • 使用加密器的encrypt()方法对填充后的明文进行加密,得到密文。
    初始化AES解密器
  • 与加密过程类似,使用相同的密钥和加密模式(在这种情况下是ECB)创建一个新的AES解密器对象。
    解密
  • 使用解密器的decrypt()方法对密文进行解密,得到解密后的字节串。
  • 由于解密后的数据可能包含填充字节,因此使用unpad函数去除这些填充字节。
    输出结果
  • 打印密钥、明文、密文和解密后的文本。注意,密钥以十六进制形式打印,以便更容易阅读。明文和密文也以十六进制
相关文章
|
15天前
|
存储 安全 算法
AES算法
【10月更文挑战第30天】AES算法
32 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
48 2
|
1月前
|
存储 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(上)
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(上)
35 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
29 1
|
1月前
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
47 1
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
37 1
|
1月前
|
机器学习/深度学习 数据采集 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-11
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-11
41 1
|
1月前
|
人工智能 自然语言处理 文字识别
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-10
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-10
32 1
|
1月前
|
存储 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
37 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
59 0