公钥密码通常只用于少量数据。它很慢,很难正确使用。通常的做法是使用其他方法将非对称问题减少到由共享密钥提供安全性的问题,然后使用公钥加密来保护该共享密钥。例如:要加密文件,随机生成块或流密码(例如AES)的密钥。存储用此密码加密的数据,并将用公钥加密的密钥与加密的负载一起存储。

要签署文件,请计算加密摘要(例如SHA-256)。用私钥签署文件摘要并将其存储在文件旁边。

下面是加密的大致情况(警告,未经测试的代码,直接在浏览器中键入):import os

from Crypto.Cipher import AES

from Crypto.PublicKey import RSA

import Crypto.Util.number

def encrypt_file(rsa, input, output):

# Generate secret key

secret_key = os.urandom(16)

# Padding (see explanations below)

plaintext_length = (Crypto.Util.number.size(rsa.n) - 2) / 8

padding = '\xff' + os.urandom(16)

padding += '\0' * (plaintext_length - len(padding) - len(secret_key))

# Encrypt the secret key with RSA

encrypted_secret_key = rsa.encrypt(padding + secret_key, None)

# Write out the encrypted secret key, preceded by a length indication

output.write(str(len(encrypted_secret_key)) + '\n')

output.write(encrypted_secret_key)

# Encrypt the file (see below regarding iv)

iv = '\x00' * 16

aes_engine = AES.new(secret_key, AES.MODE_CBC, iv)

output.write(aes_engine.encrypt(input.read()))

iv是CBCmode of operation的一个

分组密码的API在PEP 272中描述。不幸的是,它只支持一次加密。对于大型文件,最好逐块加密;一次只加密一个块(AES为16字节),但需要一个更好的加密库。

请注意,一般情况下,不应使用RSA直接加密数据。最明显的问题是攻击者知道公钥,因此可以尝试猜测明文(如果攻击者认为明文可能是swordfish,则攻击者可以使用RSA公钥加密swordfish,并将结果与RSA加密的输出进行比较)。如果您想将文件发送给多个收件人,另一个需要考虑的问题是,如果RSA加密步骤是确定的,那么攻击者可以知道明文是相同的,因为密文是相同的。针对这些问题的通常防御方法是使用

在这里,上述问题似乎不适用于这种情况。但是,使用无保护的RSA可能会产生其他弱点。特别是,如果公共指数非常小(这里不是PyCrypto使用65537的情况),或者您为许多不同的收件人加密相同的材料(同样,这里可能不是这样,因为每个消息都有自己的密钥),那么simple mathematical calculation would allow the attacker to recover the RSA plaintext。为了避免这种攻击,用RSA加密的值需要“足够接近”RSA模,这样加密操作实际上执行模幂运算。我建议的填充确保通过生成符合0xff;this is believed to be safe的最高顺序字节,尽管在现实世界中您应该使用批准的填充模式(OAEP)。

python rsa加密二进制文件_用Python中的RSA加密文件相关推荐

  1. rsa java模数_公钥/私钥中的RSA密钥值和模数

    我正在编写一个使用PKI来保护电子邮件,文件等的应用程序. 使用System.Cryptography命名空间,我使用RSACryptoServiceProvider生成一个新的密钥对. 方法是: p ...

  2. python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)

    下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...

  3. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  4. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

  5. python字符串去掉空行_从python中的字符串中删除空格

    python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...

  6. python编写脚本方法_使用Python编写提取日志中的中文的脚本的方法

    由于工作需要在一大堆日志里面提取相应的一些固定字符,如果单纯靠手工取提取,数据量大,劳心劳力,于是自然而然想到了用Python做一个对应的提取工具,代替手工提取的繁杂,涉及中文字符,正则表达式不好匹配 ...

  7. python怎么更新数据库_在Python的Django框架中更新数据库数据的方法

    先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...

  8. python整数转换字符串_使用Python中的str()函数将整数值转换为字符串

    python整数转换字符串 Given an integer value and we have to convert the value to the string using str() func ...

  9. 熊猫的python小课账号_学习python中的pandas有没有好的教程推荐?

    之前好多人私信我python数据分析怎么快速入门,我在这里直接介绍一下自己的心得经验吧. 要学习pandas,我并不建议看大量的教程,等看完教程,天都黑了,一觉醒来热情都凉了. 我的建议是,首先放平心 ...

最新文章

  1. c语言怎么写到单片机里,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
  2. 边缘计算和网络切片,为何成为5G的“技术网红”
  3. python判断正数和负数教案_正数和负数 教学设计
  4. WildFly 8与GlassFish 4 –选择哪个应用服务器
  5. libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...
  6. java堆和非堆_java 堆与非堆 内存
  7. 动态规划求解装箱问题(洛谷P1049题题解,Java语言描述)
  8. 算法心得1:由$nlogn$复杂度的LIS算法引起的思考
  9. 嵌套循环连接(Nested Loops), 合并联接(Merge), 哈希联接(Hash)的适用情况
  10. php unid,微信扫码登陆/微信公交号 登录PHP 自适应 UnionID统一用户
  11. 谈谈研发PLM项目管理
  12. globeimposter 解密工具_WinRAR加密和压缩伪装成GlobeImposter勒索软件,易于安全专家解密...
  13. Anaconda3下YOLOV3火焰检测
  14. 聚沙——关于禁用UAC的解决办法(Win8 System)
  15. 计算机房图怎么画,机房CAD图纸的画法教程
  16. STM32应用开发实践教程:具备交互功能的人机界面应用开发
  17. 高级编程中C语言属于,c语言高级编程
  18. shell脚本——grep cut sort uniq tee diff paster tr等小工具的使用方法
  19. ps2020无法显示最近打开
  20. AutoFac基本使用-笔记

热门文章

  1. 单元测试02:Open-Cover安装与使用
  2. php两个数组融合,php合并两个数组的方式有哪些
  3. python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...
  4. Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
  5. PHP-高并发和大流量的解决方案
  6. vue 公众号扫描_vue编写微信公众号打开相机功能
  7. [转]【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!
  8. Excel实用函数大全(名称、功能、说明、用法、举例)
  9. C语言试题四十七之程序定义了N×M的二维数组,并在主函数中自动赋值。请编写函数function(int a[N][M], int m),该函数的功能是:将数组右上半三角元素中的值乘以m。
  10. 记录平时编程或者阅读英文文档的时候不认识的英文单词