程序员眼中的RSA算法
RSA算法是数学应用于实际的一项伟大发明,起数学过程相对而言还是比较专业的,有兴趣可以看看。
RSA算法的证明过程,详见:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
首先默认有个欧拉定理及相关的推论成立,这个要看证明过程不简单

然后看一下其加密解密的公式,可以试着推导一下:

可以看出非对称的加密解密过程,在数学上是成立的。
那么回头看它的安全性:就是要确保d不被攻破,d安全的前提是n不被成功分解。
1.能不能遍历所有的素数,来猜测p,q?
a)素数有无穷多个,google一下欧几里得的反证妙法;
b)现在再想发现新的素数很困难,数字很大,目前发现的最大质数 十进制表示有17 425 170位,够写一本书;
c)现在发现的素数有多少个呢?这是最关键的。参见:http://www.zhihu.com/question/22356265
64bit的数字 十进制大概是2*10^19,其中质数的个数约为4*10^17次方,差不多有2%的数是质数,想要遍历的话,只能呵呵了。
2.每次生成秘钥对时,都要先有两个大质数,怎么获得两个大质数呢?
a)把所有发现的质数存在本地,每次随机选两个?看看数据量就知道存储不够
b)做一个公共数据库,存储所有发现的质数,每次调库?估一眼储存,还是不够的
c)公共服务随机产生,需要的话去调用接口?不安全,这个数理论上不能在网络中传输,如果公司内网,可以考虑
d)本地随机产生?靠谱,生成复杂度高不?
3.总之要随机生成,参见:http://bindog.github.io/blog/2014/07/19/how-to-generate-big-primes/
a)素数判定方法,复杂度还好,能几乎实时
b)随机寻找的复杂度,由前面64bit的数看,有2%的数是质数,这是可以接受的,平均搜100个能得到两个,1024bit的概率有多大,不清楚
c)真随机性,上面文章中提到的,有意思的斯诺登披露的消息
4.有了两个大素数后,就是软件计算的事,长位数的大数计算,可以用croypt等库来做。网上有些直接贴的代码,学学原理可以,实际用肯定是不行。
程序员眼中的RSA算法的更多相关文章
- 程序员眼中的 SQL Server-执行计划教会我如何创建索引?
先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...
- PHP 程序员学数据结构与算法之《栈》
“要成高手,必练此功”. 要成为优秀的程序员,数据结构和算法是必修的内容.而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈 ...
- 应用程序员眼中的数据库管理系统:API+数据库语言
应用程序员眼中的数据库管理系统:API+数据库语言 sqlite3_open_v2 https://www.cnblogs.com/cchust/p/5121559.html
- 程序员眼中的 SQL Server-非聚集索引能给我们带来什么?
写在前面 最近在做的一个项目,页面访问的时候很慢(大概几秒钟的样子),然后用日志记录的方式,来排查这个问题,最后发现是 Entity Framework 初始化的一个坑(大概要花 6-7 秒),详见: ...
- 一个程序员眼中的好UI
最近接到一个项目发来的UI设计图,我觉得她给的材料很专业,特此分享. 发的RAR压缩包里面有一个images目录,里面放的都是切片好的图片. 图片切片基本上都是靠近边线切的,边上留的空白很少,这样切的 ...
- 程序员眼中的UML
--克服用例图的恐惧 在实际工作中,大部分程序员很少接触到需求分析,即使有需求分析,也是草草了事,没有用正规的方式来表达,所以一般程序员使用用例图的机会是不多的.但是却又常常在各种媒体上看见用例图,于 ...
- 程序员眼中的Redis
Redis 是用C语言编写的内存中的数据结构存储系统,可以用来作数据库.缓存.消息中间件. 数据结构 字符串(strings):值是任何种类的字符串 散列(hashs):值是map 字典,数组+链表, ...
- 程序员训练机器学习 SVM算法分享
http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文 ...
- 混合开发的大趋势之 一个Android程序员眼中的 React.js 块级作用域 和 let
转载请注明出处:王亟亟的大牛之路 最近都有事干然后,快到月底了这个月给CSDN的博文也就两篇,想想也蛮多天没更了,那就来一篇. 老规矩,先安利:https://github.com/ddwhan012 ...
随机推荐
- CCF CSP 201604-2 俄罗斯方块
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-2 俄罗斯方块 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游 ...
- hadoop 初探之第二篇(杂谈)
NameNode:名称节点,主要功能在于实现保存文件元数据,这些元数据直接保存在内存中,为了保证元数据的持久性,而也会周期性的同步到磁盘上去.磁盘上的数据通常被称为元数据的映像数据 image fil ...
- 在ASP.NET Web API和ASP.NET Web MVC中使用Ninject
先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.WebUI的空MVC应用程序 3.使用NuGet安装Ninject库 二.在ASP.N ...
- numpy.base_repr 方法解释
首先看官方文档: numpy.base_repr(number, base=2, padding=0) 将给定的 number 值,换算成给定的 base 进制(默认 2 进制)的值,以字符串的形式返 ...
- Music in Car CF 746F
题目:http://codeforces.com/problemset/problem/746/F 先感叹一下题目之长! 一些测试样例在后面给出. 题目大意: Sasha 去工作的路上喜欢听歌,途中经 ...
- Oracle 判断为空 all space
You can use trim on the column. where trim(product_type) is null The above is not DBMS-independent, ...
- 【转】让你10分钟搞定Mac--最简单快速的虚拟安装
文章出处:让你10分钟搞定Mac--最简单快速的虚拟安装http://bbs.itheima.com/thread-106643-1-1.html (出处: 黑马程序员训练营论坛) 首先说明一下. 第 ...
- JAVA基础部分面试
1:面向对象编程有很多重要的特性: 封装,继承,多态和抽象. 2:什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? (1)Java虚拟机是一个可以执行Java字节码的虚拟机进程.J ...
- “公共语言规范”(CLS)
一.什么是“公共语言规范”(CLS) 定义了一个最小公共集,任何编译器只有支持这个功能集,生成的类型才能兼容其他符合CLS.面向CLR的语言生成的组件 二.CLS规则 类型的每个成员要么是字段(数据) ...
- iOS Sprite Kit教程之xcode安装以及苹果帐号绑定
iOS Sprite Kit教程之xcode安装以及苹果帐号绑定 其它的网站上下载安装Xcode 有时候,应用商店下载较慢,所以用户也可以选择从其他网站下载Xcode安装文件.下面讲解这种Xcode的 ...