当前位置: 首页 > news >正文

[python][代码]定义了一个用于AES加密和解密的工具类

 这段Python代码定义了一个用于AES加密和解密的类 Encrypt,以及两个函数 encryptdecrypt,用于对内容进行加密和解密。

#coding:utf-8from Crypto.Cipher import AES
import base64
import urllib.parseclass Encrypt:def __init__(self, key, iv):self.key = key.encode('utf-8')# @staticmethoddef pkcs7padding(self, text):bs = 16length = len(text)bytes_length = len(text.encode('utf-8'))padding_size = length if (bytes_length == length) else bytes_lengthpadding = bs - padding_size % bspadding_text = chr(padding) * paddingself.coding = chr(padding)return text + padding_textdef aes_encrypt(self, content):cipher = AES.new(self.key, AES.MODE_ECB)content_padding = self.pkcs7padding(content)encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')return resultdef aes_decrypt(self, content):cryptor = AES.new(self.key, AES.MODE_ECB)plain_text = cryptor.decrypt(base64.b64decode(content))plain_text = plain_text.decode()padding_len = ord(plain_text[len(plain_text) - 1])plain_text = plain_text[0:-padding_len]return plain_textdef quote(self,content):return urllib.parse.quote(content, safe='/', encoding=None, errors=None)def encrypt(content):cpa = Encrypt("zhiyaoshigoufazajiuxing123456789", '1234567890123456')aespw = str(cpa.aes_encrypt(content));return aespwdef decrypt(content):cpa = Encrypt("zhiyaoshigoufazajiuxing123456789", '1234567890123456')aespw = str(cpa.aes_decrypt(content)).replace("",'').strip();return aespw
  1. 类定义:

    Encrypt 接受两个参数:keyiv。在AES加密中,iv(初始化向量)通常用于CBC模式,但在这个代码示例中,它并没有被使用,因为使用的是ECB模式。
  2. 初始化方法:

    __init__ 方法将传入的 key 转换为UTF-8编码的字节。
  3. 填充方法:

    pkcs7padding 方法实现了PKCS7填充算法,确保加密的文本长度是AES块大小(16字节)的整数倍。
  4. 加密方法:

    aes_encrypt 方法使用AES的ECB模式进行加密。首先对文本进行PKCS7填充,然后加密填充后的文本,并使用base64编码加密后的字节。
  5. 解密方法:

    aes_decrypt 方法使用AES的ECB模式进行解密。首先使用base64解码加密的文本,然后解密,最后去除填充。
  6. quote方法:

    quote 方法使用 urllib.parse.quote 对内容进行URL编码。
  7. 加密函数:

    encrypt 函数创建 Encrypt 类的实例,并调用 aes_encrypt 方法进行加密。
  8. 解密函数:

    decrypt 函数创建 Encrypt 类的实例,并调用 aes_decrypt 方法进行解密。解密后,使用 replace 方法去除可能存在的非法字符 "",并使用 strip 方法去除字符串两端的空白字符。

注意事项:

  • 代码中 Encrypt 类的构造函数中 iv 参数没有被使用,如果使用CBC模式,需要正确地使用 iv
  • 在实际应用中,硬编码密钥(如示例中的 key)是不安全的,应使用更安全的密钥管理方法。
  • 使用ECB模式加密相同的明文会产生相同的密文,这可能导致安全问题。建议使用CBC或其他更安全的模式。
  • 代码中的 quote 方法似乎没有在 encryptdecrypt 函数中使用,可能是为其他用途准备的。
  • 代码中的 decrypt 函数在去除非法字符时使用了特定的字符 "",这可能是由于编码问题导致的,实际使用时需要根据具体情况调整。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 快速批量替换图片名称为指定名称(附代码)
  • 我是如何克服编程学习中的挫折感的
  • uniapp在线下载安装包更新app
  • 有哪些适合中小企业的六西格玛培训课程?
  • 规范化JavaBean
  • poi-tl循环放图片+文字说明
  • dm 到 dm 的 HS 同步部署
  • 入门request请求库使用
  • 5.1、生成树协议stp
  • 【ubuntu24.04】docker pull 配置
  • leetcode_62. 不同路径 + 63. 不同路径 II
  • Python青少年简明教程:数据类型和操作符
  • 微信小程序免费《短视频去水印》
  • day02-作业题
  • 小学二年级数学精选试题
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS盒模型深入
  •  D - 粉碎叛乱F - 其他起义
  • ESLint简单操作
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • IDEA常用插件整理
  • IP路由与转发
  • Linux gpio口使用方法
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP 小技巧
  • Python连接Oracle
  • react-native 安卓真机环境搭建
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Vue小说阅读器(仿追书神器)
  • 类orAPI - 收藏集 - 掘金
  • 使用权重正则化较少模型过拟合
  • 微信开源mars源码分析1—上层samples分析
  • 我这样减少了26.5M Java内存!
  • 用Visual Studio开发以太坊智能合约
  • 数据可视化之下发图实践
  • 选择阿里云数据库HBase版十大理由
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​linux启动进程的方式
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 达梦数据库知识点
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (4) PIVOT 和 UPIVOT 的使用
  • (C++17) std算法之执行策略 execution
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (二)正点原子I.MX6ULL u-boot移植
  • (三) diretfbrc详解
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介