aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?

OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面:

openssl aes-256-cbc -salt -in filename -out filename.enc

Python以PyCrypto包的形式支持AES,但它只提供工具。如何使用Python / PyCrypto解密使用OpenSSL加密的文件?

注意

此问题过去也涉及使用相同方案的Python加密。我已经删除了那部分以阻止任何人使用它。不要以这种方式加密任何数据,因为它不符合今天的标准。你应该只使用解密,除了后向兼容性之外没有其他原因,即当你别无选择时。想要加密?如果可能的话,使用NaCl / libsodium。

e04e07af991d2aef4d0c60bdb3eb9155.png

解决方案

鉴于Python的普及,起初我很失望,没有完整的答案可以找到这个问题。我花了相当多的时间在这个板上阅读不同的答案,以及其他资源,以使其正确。我想我可能会分享结果以供将来参考,或许可以复习; 我绝不是加密专家!但是,下面的代码似乎无缝地工作:

from hashlib import md5from Crypto.Cipher import AESfrom Crypto import Randomdef derive_key_and_iv(password, salt, key_length, iv_length): d = d_i = '' while len(d) < key_length + iv_length: d_i = md5(d_i + password + salt).digest() d += d_i return d[:key_length], d[key_length:key_length+iv_length]def decrypt(in_file, out_file, password, key_length=32): bs = AES.block_size salt = in_file.read(bs)[len('Salted__'):] key, iv = derive_key_and_iv(password, salt, key_length, bs) cipher = AES.new(key, AES.MODE_CBC, iv) next_chunk = '' finished = False while not finished: chunk, next_chunk = next_chunk, cipher.decrypt(in_file.read(1024 * bs)) if len(next_chunk) == 0: padding_length = ord(chunk[-1]) chunk = chunk[:-padding_length] finished = True

用法:

with open(in_filename, 'rb') as in_file, open(out_filename, 'wb') as out_file: decrypt(in_file, out_file, password)

如果您认为有机会对此进行改进或将其扩展为更灵活(例如,使其无盐工作,或提供Python 3兼容性),请随意这样做。

注意

这个答案过去也涉及使用相同方案的Python加密。我已经删除了那部分以阻止任何人使用它。不要以这种方式加密任何数据,因为它不符合今天的标准。你应该只使用解密,除了后向兼容性之外没有其他原因,即当你别无选择时。想要加密?如果可能的话,使用NaCl / libsodium。

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE-搜索过滤器

VUE非常实用的搜索过滤&#xff0c;喜欢点个赞哦 废话不多说&#xff0c;先来看看效果 1 引入vue <script src"https://cdn.jsdelivr.net/npm/vue"></script>2 HTML <div id"app"><input v-modelsearch /><ul v-if"search…

单选按钮必填会有红色选中提示吗_为什么单选按钮和复选框不能共存?

以下内容由摹客团队翻译整理&#xff0c;仅供学习交流&#xff0c;摹客设计协作一站式云平台&#xff0c;从产品、设计到开发&#xff0c;摹客来解决。单选按钮和复选框长期以来一直都是容易导致用户困惑的组件。这两个组件通常用于相同的情景下&#xff0c;但看起来又完全不同…

程序包org.junit.jupiter.api不存在

在跑项目的时候遇到这个问题&#xff0c;去看pom文件一切正常&#xff0c;也引入了这个依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope&…

thrift介绍及应用(一)—介绍

原文&#xff1a;http://blog.csdn.net/guxch/article/details/12157151 ------------------------------------------------------------------------------------ 一、概述 Thrift是Apache下的一个子项目&#xff0c;最早是Facebook的项目&#xff0c;后来Facebook提供给Apa…

matlab双目相机标定校正_基于双目视觉的无人机避障算法(一)

讲述在10月到12月所做的所有工作对于一个无人机自主避障来说&#xff0c;存在着以下流程&#xff1a;感知&#xff1a;障碍物检测、行人检测、目标检测SLAM&#xff1a;为无人机提供位置估计&#xff0c;构建稀疏环境地图路径规划&#xff1a;规划一条从当前位置到目标位置的移…

计算机无法播放,如果无法播放计算机mp4文件怎么办?

FireStar365接受1. 下载并安装最新版本的视频播放器(例如: Storm Video).2. 在硬盘中找到MP4视频文件.3. 右键单击该文件&#xff0c;然后选择打开方法“ Storm Video”.4. 可以双击打开页面.zxc942128835将mp4链接到计算机&#xff0c;打开磁盘&#xff0c;单击菜单栏上的工具…

thrift介绍及应用(二)—简单应用

原文&#xff1a;http://blog.csdn.net/guxch/article/details/12162131 ----------------------------------------------------------------------------------- 【接上文“thrift介绍及应用&#xff08;一&#xff09;—介绍”】 六、一个最简单的实例 Thrift文件&#xf…

打游戏的教育意义

夜色已深&#xff0c;一个男孩子还在打游戏。门忽然开了&#xff0c;妈妈走了进来&#xff0c;她把一碗阳春面摆在桌子上。说&#xff1a;"歇息一会儿&#xff0c;趁热把这碗面吃了吧。"孩子嗯了一声&#xff0c;眼睛没有离开屏幕。妈妈生怕打搅孩子&#xff0c;悄悄…

标准评分卡分数计算原理_评分卡的形式、刻度及应用场景

&#xfeff; 看到有伙伴提问&#xff1a;①我们的评分卡做好后&#xff0c;后续的使用策略是什么呀&#xff0c;都有哪些方向&#xff1f; ②评分卡分数切割点如何定&#xff0c;制定的业务逻辑是什么&#xff1f;其实&#xff0c;这个问题不好回答&#xff0c;也好回答。一方…

hexeditor 复制二进制值_MySQL复制全解析 Part 6 MySQL GTID 生命周期

实验环境此次实验的环境如下MySQL 5.7.25Redhat 6.10操作系统账号:mysql数据库复制账号:repl复制格式:基于行的复制通过前面的介绍我们知道MySQL的复制有两种方法基于二进制日志文件位置基于GTID上一节的内容为GTID的格式和存储&#xff0c;这节根据官方文档我们说GTID的生命周…

自动ip的计算机共享打印,局域网内自动获取ip地址怎么设置打印机共享文件夹...

在局域网环境中,为了尽可能地节省办公成本,很多用户都会选择在局域网中架设、部署共享打印机,以便在单位的任何角落处都能方便、自如地进行打印操作。下面是学习啦小编为大家整理的关于局域网内自动获取ip地址怎么设置打印机共享文件夹&#xff0c;一起来看看吧!局域网内自动获…

高级数据分析1代码_用Python进行数据分析,让你一看就会

本书详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。虽然本书的标题是“数据分析”&#xff0c;重点却是Python编程、库&#xff0c;以及用于数据分析的工具。第1章 准备工作第2章 Python语法基础&#xff0c;IPython和Jupyter Notebooks第3章 …

工期日历天计算器_天津实地告诉你:房建项目是怎样保节点,抢工期的?

工程概况天津实地蔷薇花园住宅地块项目共计由24栋单体住宅、2栋配建及地下人防车库组成&#xff0c;其中12层小高层4栋、13层小高层1栋、19栋7层洋房。总建建筑面积为139348.62㎡&#xff0c;地上99348㎡&#xff0c;地下40000㎡&#xff0c;人防面积为14236㎡。工期目标项目施…

测试fps游戏反应速度软件,FPS反应速度提速

静谧无声&#xff0c;生死一瞬&#xff0c;说的就是FPS游戏&#xff0c;没有哪一个种类的游戏可以比拟我们FPS玩家对于反应速度的追求&#xff0c;更快更准哪怕提速只是1毫秒&#xff0c;无数高手之所以为高手就是因为他们可以打出我们看起来不可能完成的击杀&#xff0c;特别是…

html5中单选框被选中把值传给后台_HTML5的表单设计

使用过Delphi的程序员&#xff0c;对Form这个词应该比较熟悉。在Delphi中&#xff0c;Form被翻译为“界面、窗口”&#xff0c;作用是&#xff1a;为用户提供界面&#xff0c;供用户输入信息&#xff0c;向用户展示处理结果。HTML5中也有Form&#xff0c;功能与Delphi中的Form差…

python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

目录 Python数据处理从零开始----第四章&#xff08;可视化&#xff09;①③多变量绘图 Python数据处理从零开始----第四章&#xff08;可视化&#xff09;&#xff08;14&#xff09;使用seaborn绘制热图 seaborn.heatmapHeat maps显示数字表格数据&#xff0c;其中单元格根据…

Hive的系统架构

一、架构图 二、各组件 用户接口&#xff1a;包括 CLI&#xff08;控制台命令&#xff09;&#xff0c;JDBC/ODBC&#xff0c;WebUI。 CLI&#xff0c;即Shell命令行 JDBC/ODBC 是 Hive 的Java&#xff0c;与使用传统数据库JDBC的方式类似 WebGUI是通过浏览器访问 Hive --…

坐标不显示_Simpack不显示坐标轴方向的解决方法

经常有用户咨询Simpack软件打开模型时&#xff0c;不能显示坐标轴的x、y、z方向&#xff0c;这个问题对建模有很大的影响。本文是兰州交通大学陈龙同学提供的解决方法&#xff0c;供大家参考。使用Simpack软件建模时&#xff0c;会遇到这种情况&#xff1a;比如要创建标记点时&…

th:text为null报错_为vue3.0的学习TS解读高级类型

知识点摘要本节课主要关键词为: 自动类型推断 / 类型断言 / 类型别名(type) / 映射类型(Pick/Record等...) / 条件类型(extends) / 类型推断(infer)自动类型推断(不用你标类型了,ts自己猜)大家现在写ts的时候一定会在每个变量后面都加上类型吧? 但是?现在告诉大家有些情况下你…

Hive与Hadoop的调用关系

一、调用图 二、步骤解析 1、提交sql 交给驱动 2、驱动编译&#xff1a;解析相关的字段表信息 3、去metastore查询相关的信息 返回字段表信息 4、编译返回信息 发给驱动 5、驱动发送一个执行计划 交给执行引擎 6、执行计划 6.1、DDLs 对数据库表的操作的 直接和metastore交互 …