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

python实现openssl的EVP_BytesToKey及AES_256_CBC加解密算法

python实现openssl
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), NULL, pass, passlen, 1, key, iv);
并实现AES 256 CBC加解密.

# encoding:utf-8import base64
from Crypto.Cipher import AES
from Crypto import Random
from hashlib import md5def EVP_BytesToKey(password, salt, key_len, iv_len):"""实现opensslEVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), NULL, pass, passlen, 1, key, iv);"""pass_salt = (password + salt).encode(encoding='utf-8') #传给hashlib.md5前要先转成bytesdtot = md5(pass_salt).digest() # 返回bytes,不要转成十六进制字符串d = [ dtot ]while len(dtot) != (key_len + iv_len):d.append(md5(d[-1] + pass_salt).digest()) # 在一维列表中,下标为-1表示该元素为列表的最后一项dtot += d[-1]return dtot[:key_len], dtot[key_len:key_len+iv_len]def encryt(string, key, iv):"""加密文本:param string: 待加密文本:param key: 密钥:param iv: 偏移量/初始向量:return: 密文"""cipher = AES.new(key, AES.MODE_CBC, iv)x = AES.block_size - (len(string) % AES.block_size)# 长度不整除16时,需要进行补全, 比如少了3个,就填充3个3if x != 0:string = string + chr(x)*xmsg = cipher.encrypt(string.encode('utf-8'))return msgdef decrypt(en_str, key, iv):"""解密文本:param en_str: 待解密文本:param key: 密钥:param iv: 偏移量/初始向量:return: 解密后的文本"""cipher = AES.new(key, AES.MODE_CBC, iv)msg = cipher.decrypt(en_str)padding_len = msg[len(msg)-1]return msg[0:-padding_len]if __name__ == '__main__':with open('res.json', 'r') as fp:content = fp.readlines() #listtext_16str = ''.join(content) # list to strtext_byte = bytes.fromhex(text_16str) #get bytespassword = "%^%xxxxxx"key, iv = EVP_BytesToKey(password, '', 32, 16)#out = encryt('world', key, iv)print(out.hex())out = decrypt(text_byte, key, iv)print(out.decode('utf-8'))

作者:帅得不敢出门 csdn原创谢绝转载收录

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • “存算分离“和“湖仓一体“
  • Ansible 安装及使用说明
  • (补充)IDEA项目结构
  • Linux重要知识点
  • JMeter案例分享:通过数据验证的错误,说说CSV数据文件设置中的线程共享模式
  • Flutter和React Native(RN)的比较
  • 【无需公网IP】在树莓派上搭建Web站点
  • 亚马逊云科技EC2简明教程
  • 每日Attention学习11——Lightweight Dilated Bottleneck
  • Jetson-AGX-Orin 非docker环境源码编译安装CyberRT
  • ctfshow--web入门--SSRF
  • Python爬虫与文本到语音转换实战:获取并播报长沙天气
  • golang interface指针实现
  • 数据库使用SSL加密连接
  • vue学习day08-v-model详解、sync修饰符、ref和$refs获取dom组件、Vue异步更新和$nextTick
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Apache的80端口被占用以及访问时报错403
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Vue.js-Day01
  • 力扣(LeetCode)965
  • 人脸识别最新开发经验demo
  • 实现简单的正则表达式引擎
  • 使用agvtool更改app version/build
  • 王永庆:技术创新改变教育未来
  • 新版博客前端前瞻
  • 学习使用ExpressJS 4.0中的新Router
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​数据链路层——流量控制可靠传输机制 ​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (windows2012共享文件夹和防火墙设置
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (强烈推荐)移动端音视频从零到上手(上)
  • (五)IO流之ByteArrayInput/OutputStream
  • (小白学Java)Java简介和基本配置
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一) springboot详细介绍
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • *** 2003
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • ?
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解