python rsa加密二进制文件_用Python中的RSA加密文件

公钥密码通常只用于少量数据。它很慢,很难正确使用。通常的做法是使用其他方法将非对称问题减少到由共享密钥提供安全性的问题,然后使用公钥加密来保护该共享密钥。例如:要加密文件,随机生成块或流密码(例如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)。

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

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

相关文章

开源C# Winform控件库《SunnyUI》强力推荐

本站(https://dotnet9.com)曾介绍过一款Winform开源控件库《HZHControls》,文章发布后不少朋友热情的咨询相关控件库信息,由此看来Winform在大家心中的地位还是挺高的。今天小编再分享一款新鲜出炉的 Winform 控件库库——SunnyUI,一起跟 Dot…

python——学习笔记2

python的数据结构 字符串: 字符串小写转大写: 字符串大写转小写: 删除空格: 空白是实际文本之前和/或之后的空间,通常您想删除这个空间。 strip()方法从开头或结尾删除任何空格: 替换字符串: replace()方…

庐山真面目之一 微服务的简介和技术栈

一、简介 这些年软件的设计规模越来越庞大,业务需求也越来越复杂,针对系统的性能、高吞吐率、高稳定性、高扩展等特性提出了更高的要求。可以说业务需求是软件架构能力的第一推动力,由于这些因素导致了软件架构思想和相关技术也在发生…

.net 读蓝牙数据_Linux内核曝严重蓝牙漏洞,影响多个版本

谷歌安全研究人员在Linux Kernel中发现了一组蓝牙漏洞(BleedingTooth),该漏洞可能允许攻击者进行零点击攻击,运行任意代码或访问敏感信息。BleedingTooth漏洞分别被命名为CVE-2020-12351,CVE-2020-12352和CVE-2020-24490。其中最严重的漏洞是…

python——学习笔记3

日期: Python 日期和时间 函数: python 传不可变对象实例

GraphQL:拼接Stitching

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进&#xff0c…

python编_python编

1.加法运算:提示用户提供数值输出时,常出现的一个问题是,用户提供的是文本而不是数字。在这种情况下,当你尝试将输入转换为整数时,将引发ValueError异常。编写一个程序,提示用户输入两个数字,再…

算法题目——电梯(HDU-1008)

题目链接&#xff1a;HDU-1008 上楼&#xff1a;输入俩楼层之差 * 6s 停留层的5s 下楼&#xff1a;输入俩楼层之差 * 4s 停留层的5s #include<iostream> #include<vector>using namespace std; int main() {vector<int> vec;//用于存储每次的楼层数 vector…

.NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记

2.1 引入http协议web server && web application framework.net 与 .net core asp .net coreweb api 示例CS&#xff1a;客户端-服务器BS&#xff1a;浏览器-服务器2.1.1 http协议请求过程消息结构请求方法状态码header请求过程1.URL解析2.DNS查询3.TCP连接4.处理请求5…

spss因子分析结果解读_因子分析巴特利特球形度检验结果解读

因子分析时&#xff0c;一般根据KMO和巴特利特检验的结果来判断数据是否适合做因子分析。那么巴特利特检验结果如何解读呢&#xff1f;既然是假设检验&#xff0c;必定有原假设和备择假设&#xff0c;只需要搞清楚假设是什么&#xff0c;也就知道应该如何解读了。百度百科上是这…

算法题目——质量(POJ-1862)

题目链接&#xff1a;POJ-1862 再说一遍&#xff1a;STL大法好&#xff0c;贪心算法 优先队列(大根堆) #include<iostream> #include<queue> #include<math.h> using namespace std;int main() {priority_queue<float> pqueue;int n;cin>>n;fl…

python怎么安装bokeh_python怎么安装bokeh

Bokeh (Bokeh.js) 是一个Python交互式可视化库&#xff0c;支持现代化 Web 浏览器&#xff0c;提供非常完美的展示功能。Bokeh 的目标是使用 D3.js 样式提供优雅&#xff0c;简洁新颖的图形化风格&#xff0c;同时提供大型数据集的高性能交互功能。Boken 可以快速的创建交互式的…

理解 redis 中的 集合对象类型

这篇我们来看看Redis五大类型中的第四大类型&#xff1a;集合类型&#xff0c;集合类型还是蛮有意思的&#xff0c;第一个是因为它算是只使用key的Dictionary简易版&#xff0c;这样说来的话&#xff0c;它就比Dictionary节省很多内存消耗&#xff0c;第二个是因为它和C#中的Ha…

算法题目——田忌赛马(POJ-2287)

POJ-2287 参考文章 #include<iostream> #include<vector>#include<algorithm> #include<cstring> using namespace std; bool comp(int x ,int y) {return x > y; } int main() {int n;int temp;//保存临时变量的 vector<int> vec;//用于保…

qint64转为qstring qt_Qt中Qstring,char,int,QByteArray之间到转换

11、各种数据类型的相互转换char * 与 const char *的转换char *ch1"hello11";const char *ch2"hello22";ch2 ch1;//不报错&#xff0c;但有警告ch1 (char *)ch2;char 转换为 QString其实方法有很多中&#xff0c;我用的是&#xff1a;char ab;QString s…

评估服务基础性能应该参考那些指标?

当谈到网络服务性能的时候&#xff0c;很多人都会采用一些单一性的指标数据作为性能参考&#xff0c;如支持多少在线&#xff0c;能跑到多少带宽等&#xff1b;实际上这些单一性的指标数据并不能反映服务的基础性能&#xff0c;毕竟应用场景是多样性的&#xff1b;那更好判断一…

算法题目——岛屿问题(POJ-1328)

POJ-1328 题目大意&#xff1a;在x轴上建立尽量少的雷达覆盖所有的岛屿。 Input&#xff1a;岛屿的数量n&#xff0c;雷达覆盖半径d.接下来的n行一行表示一个岛屿(x,y). Output:每个案例的雷达最少数目. 经典的区间选点&#xff01; 要搞清楚为什么排序&#xff0c;然后要明…

oracle symonym_Oracle的同义词(synonyms)

oracle的同义词总结&#xff1a;从字面上理解就是别名的意思&#xff0c;和视图的功能类似。就是一种映射关系。1.创建同义词语句&#xff1a;create public synonym table_name for user.table_name;其中第一个user_table和第二个user_table可以不一样。此外如果要创建一个远程…

简述C#中应用程序集的装载过程

了解程序集如何在C&#xff03;.NET中加载我们一直在处理库和NuGet软件包。不管是好是坏&#xff0c;高级.NET开发人员都需要了解.NET运行时如何加载程序集。这些库依赖于其他流行的库&#xff0c;并且有很多共享的依赖项。有了足够大的依赖关系网络&#xff0c;您最终将陷入冲…

vue 插入word模板 项目_10 分钟为你的 vue 项目编写代码文档

代码文档是软件开发使用和维护的必备资料,有了文档&#xff0c;开发和维护以及协作的效率将变得大大提升。tips&#xff1a;如果对 JSDoc 已经熟悉&#xff0c;可以直接跳到实战演练环节。什么是文档&#xff1f;软件文档或者源代码文档是指与软件系统及其软件工程过程有关联的…