PyCrypto密码学库源码解析(二)RSA参数生成_rsa.generate-程序员宅基地

技术标签: RSA  python  实现  源码解析  密码学  pycrypto  

Python Crypto库源码解析(二) RSA参数生成

* 版权声明 *
引用请注明出处,转载请联系: [email protected]


本文主要讲解pycrypto库中RSA参数生成的实现方法。主要涉及的模块是PublicKey.RSA 和其继承模块PublicKey._RSA。


0 本文需要的背景知识

0.1 RSA算法的参数

在上一篇文章PyCrypto密码学库源码解析(一)随机数和大素数生成0.5 RSA算法描述 中已经提到RSA的参数生成相关的内容,这里重申一次:

选择两个大的质数p和q,p不等于q,计算N=pq
选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
计算d:d× e ≡ 1 (mod (p-1)(q-1))。
将p和q的记录销毁。
(N,e)是公钥,(N,d)是私钥。

0.2 RSA参数的要求

根据上文所述,可以根据参数生成过程来逐一解释参数的要求。

选择两个大的质数p和q,p不等于q

现如今主流的RSA密钥要求达到的位数是1024比特,例如在浏览器的公钥证书中存放的公钥就是1024比特的,而推荐使用的安全性较高的则是2048比特,也就是要求p*q的结果应该达到1024比特。

选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)

这一点是数论要求的,否则会造成算法被攻击,要保障gcd(e,(p-1)(q-1))=1也就是要保证gcd(e,p-1) = gcd(e,q-1) = 1,这一点实际上在上一篇文章中(2.6 获取一个满足RSA要求的强素数)已经讲解过:

if e and is_possible_prime:
            if e & 1:
                if GCD (e, X-1) != 1:
                    is_possible_prime = 0
            else:
                if GCD (e, divmod((X-1),2)[0]) != 1:
                    is_possible_prime = 0

getStrongPrime函数在生成素数的时候,就已经将e和p-1的关系做过判断,才进行的输出。

所以目前的问题只剩下如何选择参数e,对于参数e,在库的文档中有这样一段说明:

Public RSA exponent. It must be an odd positive integer.
It is typically a small number with very few ones in its binary representation.
The default value 65537 (= 0b10000000000000001 ) is a safe choice: other common values are 5, 7, 17, and 257.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/O_1CxH/article/details/81674614

智能推荐

收藏 | 语义分割数据集总结-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏33次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文转自|视觉算法图片来源于网络语义分割在自然数据集的分割效果不断进步,有研究逐步应用到了遥感领..._公开的sar语义分割数据集

都有哪些原因导致Wi-Fi产品射频电路EVM降低?-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏12次。本文只有部分内容,请到一牛网阅读全文: http://www.16rd.com/blog-25466-2979.html 802.11/a/b/g /n WLAN发射机的性能会直接影响产品质量。在当今WLAN产品市场空间拥挤、利润微薄的情况下,提高质量无疑会使产品更具特色并增加其销售量,还能减..._evm调试

Python中json, demjson的使用_damjson-程序员宅基地

文章浏览阅读911次。json中常用的方法在使用的时候先导入json库: import json方法描述json.dumps()将 Python 对象编码成 JSON 字符串json.loads()将已编码的 JSON 字符串解码为 Python 对象json.dump()将Python内置类型序列化为json对象后写入文件json.load()读取文件中json形式的字符串元素转化为Python类型用法json.dumps()import jsonjsonSt_damjson

多语言网站(如何实现网站的多语言版本?)_多语言官网平台,一般采用多平台,还是共用一个平台-程序员宅基地

文章浏览阅读3.6w次,点赞5次,收藏20次。近日,公司要做一个多语言的网站,今天在网上收集资料,下面是个人觉得很不错的文章,有兴趣的朋友可以参考下:多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获得内容相同的信息。多语言网站实现方案1,静态:就是为每种语言分别准备一套页面文件,要么通过文件后缀名来区分不同语言,要么通过子目录来区分不同语言。例如对于首页文件index_en_多语言官网平台,一般采用多平台,还是共用一个平台

oracle11g 官网下载链接_oracle11官网-程序员宅基地

文章浏览阅读1.2w次,点赞16次,收藏38次。今天登陆oracle官网以后,无法找到之前的11g的链接,只能看到19c的,后来找到了另一篇博客里面归纳的下载链接,如下:Oracle11GR2Oracle Database 11g Release 2 (11.2.0.1.0) for Microsoft Windows (64-bit)http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.ziphttp://download.oracle.com_oracle11官网

【Unity】多个按钮绑定同一个监听方法_unity多个按钮都得一个一个的注册吗-程序员宅基地

文章浏览阅读4.4k次,点赞5次,收藏12次。遇到一个需求,为多个同类型的按钮绑定监听方法。通常做法是为每一个按钮分别声明一个监听方法,但当按钮过多的时候,这种方法就不太明智了,重复代码太多,为按钮绑定事件时也容易混乱。于是我想为所有按钮只绑定一个监听方法,然后在监听方法里用switch语句分别处理不同按钮的事件,所以问题的关键是如何判断按下了哪个按钮?实际上,这个问题很容易解决,只需一行代码public void BtnOnC..._unity多个按钮都得一个一个的注册吗

随便推点

C语言之指针篇,快速上手系列-C语言之指针篇(一)-程序员宅基地

文章浏览阅读205次。指针的灵活运用使得c语言更加强大,指针是C语言中十分重要的部分,可以说指针是C语言的灵魂。当然指针不是万能的,但没有指针是万万不能的,有些操作没有指针是办不到的,如动态内存分配。鉴于学习指针的必要性,从现在开始介绍指针方面的知识,本篇主要介绍指针相关概念及指针的定义与应用两方面的内容:指针相关概念1、指针:我们使用的计算机内存为8G,系统为了更好地管理我们的内存,就为内存区的每一个字节都分配一个编..._c语言指针项目练手

软件测试:黑盒测试用例的四种设计方法_黑盒测试用例常用的设计方法-程序员宅基地

文章浏览阅读651次。在对每一输出的同时进行边值分析时,要先确定输出域的全部边值,再设计不同的数据覆盖输出域的边值,这样就能有效地保证输出域的边值被覆盖。对于在测试行业发展的小伙伴们来说应该会很有帮助,有需要的朋友你可以dd我。不能盲目猜想,不能盲目猜测,需要了解系统的薄弱之处和开发人员的盲点,还需要根据以前的缺陷分析报告,分析系统中最容易出现错误的地方,以此作为误判方法的依据。在测试过程中,需要分析每个输出的等价类,在输出域中通常需要确定输出域的所有可能情况,然后对输出的结果进行分类,最后需要设计输入来覆盖所有输出的结果。_黑盒测试用例常用的设计方法

Retinanet网络的安装问题:error: command 'gcc' failed with exit status 1的解决办法_error: command 'gcc' failed with exit status 1重装-程序员宅基地

文章浏览阅读1.4w次。一:安装步骤1.打开Git,克隆retinanet代码到本地:git clone https://github.com/fizyr/keras-retinanet.git2.在当前存储目录下keras-retinanet-master中,执行:pip3 install . --userNOTE:由于自定义安装tensorflow,这个软件包并没有定义对tensorf..._error: command 'gcc' failed with exit status 1重装

[zz]IPv6名称到地址的转换函数getaddrinfo()一些使用心得_python ipv6 全称-程序员宅基地

文章浏览阅读2.3k次。http://www.newsmth.net/bbscon.php?bid=112&id=30469水木社区(展开完整界面) → 网络编程 → 阅读文章NetPRG 版

百度地图在合适视野范围内显示所有的点_map 所选地点全部展示-程序员宅基地

文章浏览阅读5.2k次。通常地图会显示出多个点,如像行驶轨迹等,往往在屏幕上一次性就全部显示出来,那要怎么设置地图的显示宽高,才能将所有的点合理的显示出来呢。_map 所选地点全部展示

/proc/meminfo之谜_error reading /proc/meminfo-程序员宅基地

文章浏览阅读876次。转自:http://blog.sina.com.cn/s/blog_3e8d09120102wkzh.html​/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比”free”等命令要丰富得多,然而真正理解它并不容易,比如我们知道”Cached”统计的是文件缓存页,..._error reading /proc/meminfo

推荐文章

热门文章

相关标签