python 接口加密

# -*- coding: utf-8 -*-

"""
@author: Mr_zhang
@software: PyCharm
@file: encryption.py
@time: 2023/3/23 10:00
"""
import json
import time
import base64

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


class AesCrypt:
    """
    Aes加解密
    """

    def __init__(self):
        self.key = "Key!@#$%Key!@#$%"
        self.mode = AES.MODE_ECB
        self.block_size = AES.block_size
        self.pad = "pkcs7"
        self.encoding = "utf-8"

    def __aes_obj(self):
        """aes對象"""
        key_bytes = self.key.encode(self.encoding)
        return AES.new(key=key_bytes, mode=self.mode)

    def encrypt(self, data):
        """
        AES加密
        :param data: 原始字符串
        :return: 加密字符串
        """
        _aes_obj = self.__aes_obj()
        data_bytes = json.dumps(data).encode(self.encoding)
        try:
            cipher_base64_bytes = base64.b64encode(
                _aes_obj.encrypt(pad(data_to_pad=data_bytes, block_size=self.block_size, style=self.pad)))
            return True, cipher_base64_bytes.decode(self.encoding)
        except Exception as e:
            return False, e

    def decrypt(self, data):
        """
        AES解密
        :param data: 待解密字符串
        :return: 原始字符串
        """
        _aes_obj = self.__aes_obj()
        data_base64_bytes = data.encode(self.encoding)
        try:
            data_bytes = unpad(padded_data=_aes_obj.decrypt(base64.b64decode(data_base64_bytes)),
                               block_size=AES.block_size, style=self.pad)
            return True, json.loads(data_bytes.decode(self.encoding))
        except Exception as e:
            return False, e


if __name__ == '__main__':
    """前後端交互,數據接口應加密"""
    _data = {
        "code": 200,
        "count": 1,
        "results": [
            {"id": 1, "name": "張建平", "age": 26, "phone": 17343037825}
        ]
    }
    start_des_time = time.time()

    print("=" * 20)
    start_aes_time = time.time()
    aes_obj = AesCrypt()
    flag, encrypt = aes_obj.encrypt(_data)
    print("加密後: ", encrypt)
    if flag:
        flag, decrypt = aes_obj.decrypt(encrypt)
        print("解密後: ", decrypt)
    print(time.time() - start_aes_time)  # 0.0009999275207519531

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章