python怎样打开加密的文件_如何在Python中解密OpenSSL AES加密的文件?
拉莫斯之舞
我将通过一些更正重新发布您的代码(我不想掩盖您的版本)。当您的代码正常工作时,它不会检测到填充周围的一些错误。特别是,如果提供的解密密钥不正确,则填充逻辑可能会做一些奇怪的事情。如果您同意我的更改,则可以更新您的解决方案。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]# This encryption mode is no longer secure by today's standards.# See note in original question above.def obsolete_encrypt(in_file, out_file, password, key_length=32): bs = AES.block_size salt = Random.new().read(bs - len('Salted__')) key, iv = derive_key_and_iv(password, salt, key_length, bs) cipher = AES.new(key, AES.MODE_CBC, iv) out_file.write('Salted__' + salt) finished = False while not finished: chunk = in_file.read(1024 * bs) if len(chunk) == 0 or len(chunk) % bs != 0: padding_length = bs - (len(chunk) % bs) chunk += padding_length * chr(padding_length) finished = True out_file.write(cipher.encrypt(chunk))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]) if padding_length < 1 or padding_length > bs: raise ValueError("bad decrypt pad (%d)" % padding_length) # all the pad-bytes must be the same if chunk[-padding_length:] != (padding_length * chr(padding_length)): # this is similar to the bad decrypt:evp_enc.c from openssl program raise ValueError("bad decrypt") chunk = chunk[:-padding_length] finished = True out_file.write(chunk)
python怎样打开加密的文件_如何在Python中解密OpenSSL AES加密的文件?相关推荐
- aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?
OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面: openssl aes-256-cbc -salt -in filename -out filename.enc Py ...
- java如何解压rar文件怎么打开_如何在java中实现对zip和rar文件的解压
如何在java中实现对zip和rar文件的解压 关注:101 答案:1 mip版 解决时间 2021-01-26 10:50 提问者芣①樣哋羙莮 2021-01-25 22:44 如何在java中 ...
- matlab分析xml文件_如何在Java中读取XML文件(DOM分析器)
matlab分析xml文件 Today we will learn how to read the XML file in Java. We will also learn how to parse ...
- python 读取日志文件_如何在Python中跟踪日志文件?
使用SH模块(PIP安装sh):from sh import tail# runs foreverfor line in tail("-f", "/var/log/som ...
- python如何读取uni文件_如何在Python中通过HTTP与UniProt交谈?
我试图从UniProt获得一些结果,这是一个蛋白质数据库(细节并不重要).我正在尝试使用一种从一种ID转换为另一种ID的脚本.我能够在浏览器上手动执行此操作,但无法在 Python中执行此操作. 在h ...
- linux中python如何调用matlab的数据_?如何在Python中加入多个数据帧?
全文共2235字,预计学习时长7分钟 来源:Pexels 初学Python编程的人,面临的是各种未知的挑战. 下面是一个几乎让所有更有抱负的数据科学家都感到意外的场景: 你正在处理一个从多个源收集数据 ...
- 查看文件_如何在Mac上显示和查看隐藏的文件/文件夹
今天的文章推出的是如何在Mac上显示和查看隐藏的文件/文件夹.出于隐私或安全性考虑,出于多种原因,我们需要在Mac计算机上隐藏某些文件.这些文件或文件夹在默认情况下是为Mac的平稳运行而隐藏的,但是如 ...
- macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度
macos 虚拟镜像文件 File transfer speeds can vary greatly from device to device. The same holds true for ne ...
- python中用什么函数读取字符串_如何在Python中获得函数名作为字符串?
在Python中,如何在不调用函数的情况下以字符串的形式获得函数名? 1 2 3 4def my_function(): pass print get_function_name_as_string( ...
最新文章
- Delphi.net Chrome
- UNPIVOT的详细说明
- 顺序表的基本操作实验报告_INDIRECT函数从入门到进阶之相同顺序跨表引用
- 微软自带的浏览器Microsoft Edge不能上网的解决办法
- org.apache.axis.ConfigurationException: No service named ldapOperate is available解决方法
- 《赢在中国》第二赛季108将进京
- 因果推断笔记——DML :Double Machine Learning案例学习(十六)
- 某程序员入职后,发现领导是前公司的下属
- 【Golang】查找-学习笔记
- 生信:1:vcf格式文件解读
- 正睿OI补题(贪心)
- C/C++指针的经典笔试面试题
- 苹果开发者公司账号的申请步骤
- Golang开发入门
- 6.亿级流量电商详情页系统实战
- 澳大利亚史上最大数据泄露事件,40%的居民信息被泄露
- 实现私有DNS搭建(正向解析+反向解析+主从同步+安全措施+配置转发服务器+基于ACL实现智能DNS)
- 【设计模式之旅】01|开篇:我们为什么要学习设计模式
- markdown实现表格内换行
- html 获得控件,js获取控件名称、及内容
热门文章
- Python 空值与非空值
- php输出字符unicode码,[PHP]单字符Unicode编码解码函数
- pytorch 1.9.0 backward函数解释以及报错(RuntimeError: grad can be implicitly created only for scalar outputs)
- pycharm如何调试函数中的断点?找出操作对应的代码部分
- Intel Realsense D435 深度图为什么会出现残影?(Invalid Depth Band 无效深度带)(黑洞)
- 快递打印云服务器_企业微信支持寄快递查快递,实现员工寄件自由
- Docker环境运行Vue项目
- linux多网卡bind发送数据,Linux系统多网卡绑定实战
- mysql frm恢复数据_MYSQL使用.frm恢复数据表结构的实现方法
- mysql 交集_MySQL 查询结果取交集的实现方法