首页 > 编程语言 >python 接口加密

python 接口加密

时间:2023-03-23 15:11:40浏览次数:61  
标签:aes 加密 python self bytes 接口 time obj data

# -*- 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

 

标签:aes,加密,python,self,bytes,接口,time,obj,data
From: https://www.cnblogs.com/52-qq/p/17247521.html

相关文章

  • 10 种聚类算法的完整 Python 操作示例
    一.聚类聚类分析,即聚类,是一项无监督的机器学习任务。它包括自动发现数据中的自然分组。与监督学习(类似预测建模)不同,聚类算法只解释输入数据,并在特征空间中找到自然组或群......
  • python 协程
    1.协程定义不开辟新的线程的基础上,实现多个任务,是个特殊的生成器。一秒钟能切换上百次。2.原始版协程importtime#1.work1生成器defwork1():whileTrue:......
  • Python multiprocessing 多进程
    进程:process线程:threadPython多进程和多线程哪个快由于GIL的存在,很多人认为Python多进程编程更快,针对多核CPU,理论上来说也是采用多进程更能有效利用资源。但这不是......
  • SICP:求值和环境模型(Python实现)
    绪论我们在第一章引进复合过程时,采用了求值的代换模型定义了将过程应用于实参(arguments)的意义:将一个复合过程应用于一些实参,也就意味着用实参替换过程体里对应的形参(for......
  • LevelDb-用户接口
    目录优缺点用户接口基本读写打开关闭数据库读写原子更新同步/异步写并发迭代器快照Slice自定义key比较器性能相关压缩缓存key设计布隆过滤获取范围数据大小近似值优缺点......
  • Python实践(1):使用爬虫将小说保存为txt文件
    本文将介绍如何利用Python编写爬虫程序将想看的小说以txt格式保存到电脑上涉及的知识:爬虫,html,正则表达式本文将以《安娜·卡列尼娜》小说在线阅读_列夫·托尔斯泰(sb......
  • chatgpt写程序-python小游戏-2048-pygame
    闲的没事,用chatpgt弄了个小游戏,2048,利用pygame实现,无额外贴图。只需要告诉他写个python游戏2048,只用pygame实现,不要额外贴图。然后在他暂停后说请继续,最后会有一些bug,把报......
  • 电商平台趋势妙手采集类API接口
    电商平台趋势,平台化。大家可以看到大的电商都开始有自己的平台,其实这个道理很清楚,就是因为这是充分利用自己的流量、自己的商品和服务大效益化的一个过程,因为有平台,可以利......
  • Python中的重试机制
    ====引用自https://www.jb51.net/article/254886.htm(一文详解Python中的重试机制)这里要给大家介绍的是一个第三方库-Tenacity(标题中的重试机制并并不准确,它不是Python......
  • python 视频中找关键
    #!/usr/bin/envpython#coding:utf-8#@author:sSWans#@file:main.py#@time:2018/1/1115:54importosimportrandomfrom_datetimeimportdatetimei......