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 @ 2024-06-03 20:11  CAI_11  阅读(456)  评论(0)    收藏  举报