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

 

posted @   CAI_11  阅读(192)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示