AES/CBC/PKCS7Padding加解密
继上一篇MD5加密后再记录一篇AES/CBC/PKCS7Padding加解密方法
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives.padding import PKCS7
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.ciphers.algorithms import AES
from cryptography.hazmat.primitives.ciphers.modes import CBC
from cryptography.hazmat.backends import default_backend
import base64
def aes_cbc(cbc_type, cbc_str):
"""
AES/CBC/PKCS7Padding加解密
:param cbc_type: 加解密类型 encryptor:加密 decrypted:解密
:param cbc_str: 加解密字符串
:return: 输出加解密后的内容
"""
# 设置秘钥和偏移量
key = b''
iv = b''
# 创建 Cipher 对象
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
# 判断需要加密还是解密 encryptor:加密 decrypted:解密
if cbc_type == 'encryptor':
# 创建加密器
encryptor = cipher.encryptor()
# 字符串转换为 bytes
plaintext = bytes(cbc_str, 'utf-8')
# 使用 PKCS7Padding
padder = PKCS7(AES.block_size).padder()
padded_data = padder.update(plaintext) + padder.finalize()
# 加密数据
cipher_text = encryptor.update(padded_data) + encryptor.finalize()
# 将加密后的数据以 Base64 编码输出
data = base64.b64encode(cipher_text).decode('utf-8')
# 解密
elif cbc_type == 'decrypted':
# 创建解密器
decryptor = cipher.decryptor()
# 解码 base64 编码的数据
encrypted_data = base64.b64decode(cbc_str)
# 解密数据
decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()
# 使用 PKCS7Padding 解密
unpadder = PKCS7(AES.block_size).unpadder()
unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize()
# 将解密后的数据解码为字符串
data = unpadded_data.decode('utf-8')
# print(data)
return data
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?