拉莫斯之舞

我将通过一些更正重新发布您的代码(我不想掩盖您的版本)。当您的代码正常工作时,它不会检测到填充周围的一些错误。特别是,如果提供的解密密钥不正确,则填充逻辑可能会做一些奇怪的事情。如果您同意我的更改,则可以更新您的解决方案。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加密的文件?相关推荐

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

    OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面: openssl aes-256-cbc -salt -in filename -out filename.enc Py ...

  2. java如何解压rar文件怎么打开_如何在java中实现对zip和rar文件的解压

    如何在java中实现对zip和rar文件的解压 关注:101  答案:1  mip版 解决时间 2021-01-26 10:50 提问者芣①樣哋羙莮 2021-01-25 22:44 如何在java中 ...

  3. 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 ...

  4. python 读取日志文件_如何在Python中跟踪日志文件?

    使用SH模块(PIP安装sh):from sh import tail# runs foreverfor line in tail("-f", "/var/log/som ...

  5. python如何读取uni文件_如何在Python中通过HTTP与UniProt交谈?

    我试图从UniProt获得一些结果,这是一个蛋白质数据库(细节并不重要).我正在尝试使用一种从一种ID转换为另一种ID的脚本.我能够在浏览器上手动执行此操作,但无法在 Python中执行此操作. 在h ...

  6. linux中python如何调用matlab的数据_?如何在Python中加入多个数据帧?

    全文共2235字,预计学习时长7分钟 来源:Pexels 初学Python编程的人,面临的是各种未知的挑战. 下面是一个几乎让所有更有抱负的数据科学家都感到意外的场景: 你正在处理一个从多个源收集数据 ...

  7. 查看文件_如何在Mac上显示和查看隐藏的文件/文件夹

    今天的文章推出的是如何在Mac上显示和查看隐藏的文件/文件夹.出于隐私或安全性考虑,出于多种原因,我们需要在Mac计算机上隐藏某些文件.这些文件或文件夹在默认情况下是为Mac的平稳运行而隐藏的,但是如 ...

  8. macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度

    macos 虚拟镜像文件 File transfer speeds can vary greatly from device to device. The same holds true for ne ...

  9. python中用什么函数读取字符串_如何在Python中获得函数名作为字符串?

    在Python中,如何在不调用函数的情况下以字符串的形式获得函数名? 1 2 3 4def my_function(): pass print get_function_name_as_string( ...

最新文章

  1. Delphi.net Chrome
  2. UNPIVOT的详细说明
  3. 顺序表的基本操作实验报告_INDIRECT函数从入门到进阶之相同顺序跨表引用
  4. 微软自带的浏览器Microsoft Edge不能上网的解决办法
  5. org.apache.axis.ConfigurationException: No service named ldapOperate is available解决方法
  6. 《赢在中国》第二赛季108将进京
  7. 因果推断笔记——DML :Double Machine Learning案例学习(十六)
  8. 某程序员入职后,发现领导是前公司的下属
  9. 【Golang】查找-学习笔记
  10. 生信:1:vcf格式文件解读
  11. 正睿OI补题(贪心)
  12. C/C++指针的经典笔试面试题
  13. 苹果开发者公司账号的申请步骤
  14. Golang开发入门
  15. 6.亿级流量电商详情页系统实战
  16. 澳大利亚史上最大数据泄露事件,40%的居民信息被泄露
  17. 实现私有DNS搭建(正向解析+反向解析+主从同步+安全措施+配置转发服务器+基于ACL实现智能DNS)
  18. 【设计模式之旅】01|开篇:我们为什么要学习设计模式
  19. markdown实现表格内换行
  20. html 获得控件,js获取控件名称、及内容

热门文章

  1. Python 空值与非空值
  2. php输出字符unicode码,[PHP]单字符Unicode编码解码函数
  3. pytorch 1.9.0 backward函数解释以及报错(RuntimeError: grad can be implicitly created only for scalar outputs)
  4. pycharm如何调试函数中的断点?找出操作对应的代码部分
  5. Intel Realsense D435 深度图为什么会出现残影?(Invalid Depth Band 无效深度带)(黑洞)
  6. 快递打印云服务器_企业微信支持寄快递查快递,实现员工寄件自由
  7. Docker环境运行Vue项目
  8. linux多网卡bind发送数据,Linux系统多网卡绑定实战
  9. mysql frm恢复数据_MYSQL使用.frm恢复数据表结构的实现方法
  10. mysql 交集_MySQL 查询结果取交集的实现方法