Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

python aes加密

作者:热血震荡   发布日期:2025-03-03   浏览:124

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

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

# 要加密的数据
data = b'This is a secret message'

# 创建AES加密对象,使用CBC模式
cipher = AES.new(key, AES.MODE_CBC)

# 加密数据,需要先进行填充以确保长度是块大小的倍数
ct_bytes = cipher.encrypt(pad(data, AES.block_size))

# 获取初始化向量(IV)
iv = cipher.iv

# 打印加密后的数据和IV
print("Encrypted data:", ct_bytes.hex())
print("Initialization Vector (IV):", iv.hex())

# 解密数据
decipher = AES.new(key, AES.MODE_CBC, iv=iv)
pt = unpad(decipher.decrypt(ct_bytes), AES.block_size)

# 打印解密后的数据
print("Decrypted data:", pt.decode())

解释说明:

  1. 导入模块:从 Crypto.Cipher 模块中导入 AES 类,从 Crypto.Random 模块中导入 get_random_bytes 函数用于生成随机密钥,从 Crypto.Util.Padding 模块中导入 padunpad 函数用于处理数据填充。
  2. 生成密钥:使用 get_random_bytes(16) 生成一个16字节的随机密钥。
  3. 创建加密对象:使用 AES.new() 创建一个AES加密对象,并指定使用CBC模式。
  4. 加密数据:使用 cipher.encrypt() 方法对数据进行加密,加密前需要使用 pad() 方法对数据进行填充以确保其长度是块大小的倍数。
  5. 获取IV:在CBC模式下,需要一个初始化向量(IV),它是由加密对象自动生成的。
  6. 打印加密结果:将加密后的数据和IV转换为十六进制字符串并打印出来。
  7. 解密数据:使用相同的密钥和IV创建一个新的解密对象,然后使用 unpad() 方法去除填充并解密数据。
  8. 打印解密结果:将解密后的数据转换为字符串并打印出来。

希望这段代码和解释对你有帮助!

上一篇:python中range

下一篇:python字符串转json

大家都在看

python时间格式

python开发windows应用程序

python ord和chr

python中的yield

python自定义异常

python判断路径是否存在

python list.pop

python的for i in range

npm config set python

python代码简单

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站