- 浏览: 494975 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (563)
- 工作经验 (12)
- 数据库 (13)
- Servlet (10)
- Struts2 (1)
- Spring (25)
- Eclipse (5)
- Hibernate (5)
- Eclips (8)
- HTTP (7)
- J2EE (21)
- EHcache (1)
- HTML (11)
- 工具插件使用 (20)
- JPA (2)
- 杂谈 (17)
- 数据结构与算法 (3)
- Cloud Foundry (1)
- 安全 (10)
- J2SE (57)
- SQL (9)
- DB2 (6)
- 操作系统 (2)
- 设计模式 (1)
- 版本代码管理工具 (13)
- 面试 (10)
- 代码规范 (3)
- Tomcat (12)
- Ajax (5)
- 异常总结 (11)
- REST (2)
- 云 (2)
- RMI (3)
- SOA (1)
- Oracle (12)
- Javascript (20)
- jquery (7)
- JSP自定义标签 (2)
- 电脑知识 (5)
- 浏览器 (3)
- 正则表达式 (3)
- 建站解决问题 (38)
- 数据库设计 (3)
- git (16)
- log4j (1)
- 每天100行代码 (1)
- socket (0)
- java设计模式 耿祥义著 (0)
- Maven (14)
- ibatis (7)
- bug整理 (2)
- 邮件服务器 (8)
- Linux (32)
- TCP/IP协议 (5)
- java多线程并发 (7)
- IO (1)
- 网页小工具 (2)
- Flash (2)
- 爬虫 (1)
- CSS (6)
- JSON (1)
- 触发器 (1)
- java并发 (12)
- ajaxfileupload (1)
- js验证 (1)
- discuz (2)
- Mysql (14)
- jvm (2)
- MyBatis (10)
- POI (1)
- 金融 (1)
- VMWare (0)
- Redis (4)
- 性能测试 (2)
- PostgreSQL (1)
- 分布式 (2)
- Easy UI (1)
- C (1)
- 加密 (6)
- Node.js (1)
- 事务 (2)
- zookeeper (3)
- Spring MVC (2)
- 动态代理 (3)
- 日志 (2)
- 微信公众号 (2)
- IDEA (1)
- 保存他人遇到的问题 (1)
- webservice (11)
- memcached (3)
- nginx (6)
- 抓包 (1)
- java规范 (1)
- dubbo (3)
- xwiki (1)
- quartz (2)
- 数字证书 (1)
- spi (1)
- 学习编程 (6)
- dom4j (1)
- 计算机系统知识 (2)
- JAVA系统知识 (1)
- rpcf (1)
- 单元测试 (2)
- php (1)
- 内存泄漏cpu100%outofmemery (5)
- zero_copy (2)
- mac (3)
- hive (3)
- 分享资料整理 (0)
- 计算机网络 (1)
- 编写操作系统 (1)
- springboot (1)
最新评论
-
masuweng:
亦论一次OutOfMemoryError的定位与解错 -
变脸小伙:
引用[color=red][/color]百度推广中运用的技术 ...
Spring 3 mvc中返回pdf,json,xml等不同的view -
Vanillva:
不同之处是什么??
Mybatis中的like查询 -
thrillerzw:
转了。做个有理想的程序员
有理想的程序员必须知道的15件事 -
liujunhui1988:
觉得很有概括力
15 个必须知道的 Java 面试问题(2年工作经验)
源:www.mathjax.org/demos/mathml-samples/
http://www.mathjax.org/demos/tex-samples/
评:
RSA加密解密算法中,已知公钥和密匙n,e,d,是否能将合数n=p*q分解?
先温故一下RSA算法:
1、两个大质数p,q。
2、模数n=p*q。
3、欧拉函数f=(p-1)(q-1)。
4、随机数e,1 5、模逆d,即最小整数d,e*d=1 mod f。
也就是说:
知道了p,q也就知道了n,f;
知道了f,e也就知道了d。
下面温故一下加密解密算法:
已知明文m,满足m 加密:密文c=m^e mod n。
解密:明文x=c^d mod n。
证明一下解密得到的明文x=m:
由c=m^e mod n,得c=m^e+k*n。
代入x=c^d mod n,得x=(m^e+k*n)^d mod n。
于是x=m^e^d mod n,即x=m^(e*d) mod n。
由于e^d=1 mod f,得e*d=k*f+1。
代入得x=m^(kf+1) mod n,x=m*m^(kf) mod n。
当m与n互质时,x=m*(m^f)^k mod n,由欧拉定理可知x=m mod n。
又m 当m与n不互质时,由于n=p*q且m 若m=kp,则m^(q-1)=(k*p)^(q-1)=1 mod q。
接着[(k*p)^(q-1)]^[k*(p-1)]*kp=kp mod q,即(k*p)^(e*d)=k*p mod q。
又由于(k*p)^(ed)=k*q+k*p,(k*p)^(ed)=k*q*p+k*p,。
所以m^(ed)=m mod n,x=m。
即证。
----
现在考虑以下问题:
已知n和d,是否能将n分解?
可将这个问题分为几个问题:
1、已知n和f,是否能将n分解?
2、已知n,e和d,是否能得到f?
3、已知n和d,是否能得到e?
4、已知d和f,是否能得到e?
对于问题1的回答是肯定的。
n-f+1=sum=p+q,用二分法厉遍p,得p(sum-p)和n比较大小,即可快速确定p,q的值。
所以知道了n,f,就知道了p和q。也就是说,p,q,n,f四个数知道任意两个就可以知道全部。
那么,问题2就来了。如果p,q,n,f只知其一,又知道了e和d,是否能知道其它三个数呢?
最常见的情况就是知道了n,e和d。
由e*d=1 mod f,知e*d=k*f+1。
根据的同余方程定理可以知道存在k 并且d,k始终互质,由e,f互质又可推出e,k互质和f,d互质。
现在的问题又变为,e,d,f三个数各知道两个,能否知道第三个数?在已知n的情况下又是如何呢?
已知e,f可知道d,已知e,d不可知道f。
已知d,f,因为d,f互质,所以模逆e必存在,e必然在f的同余类中。又e 也就是说,e,f求d和d,f求e的过程是相同的。
这样,问题4的回答就是肯定的。
我们还可以发现,问题3的回答是否定的。
e和d对于f的地位是等价的,我们显然不可能用公匙n,e得到密匙n,d,所以反之亦然。
于是我们发现,f是十分重要的。知道了f,那么e和d就能互求。知道了f,那么n,p,q就能互求。
最后我们回到问题2。由于n,p,q的地位是等价的,我们可以换个死路考虑。
在已知p,e,d的情况下能否知道f和n?由e*d=k*f+1可以算出k*f。
然后又知道了p,可以算出k*(p-1)(q-1)/(p-1)=k*(q-1)。
然而这样组合的数量是很多的,如果不知打k,我们不可能知道q。所以知道p,e,d不能知道f或n。
那么知道n,e,d,也就是知道n和k*f,也就是知道p*q和k(p-1)(q-1)的情况下呢?
由于k是不可知的,k值的不同会导致f产生很大的变化。
我们虽然知道上限n,但直接拿f去除以n显然不能得到正确的k。
由于p和q的差值可能很大也可能很小,所以除出来的结果可能十分接近k也可能和k差很多。
于是无法缩小搜索p和q的范围,也无从使用二分法。
所以我认为,已知n,e,d是无法得到f的,同样也无法得到p和q。
如果大家有办法分解n的话,求详细的算法。
http://www.mathjax.org/demos/tex-samples/
评:
RSA加密解密算法中,已知公钥和密匙n,e,d,是否能将合数n=p*q分解?
先温故一下RSA算法:
1、两个大质数p,q。
2、模数n=p*q。
3、欧拉函数f=(p-1)(q-1)。
4、随机数e,1 5、模逆d,即最小整数d,e*d=1 mod f。
也就是说:
知道了p,q也就知道了n,f;
知道了f,e也就知道了d。
下面温故一下加密解密算法:
已知明文m,满足m 加密:密文c=m^e mod n。
解密:明文x=c^d mod n。
证明一下解密得到的明文x=m:
由c=m^e mod n,得c=m^e+k*n。
代入x=c^d mod n,得x=(m^e+k*n)^d mod n。
于是x=m^e^d mod n,即x=m^(e*d) mod n。
由于e^d=1 mod f,得e*d=k*f+1。
代入得x=m^(kf+1) mod n,x=m*m^(kf) mod n。
当m与n互质时,x=m*(m^f)^k mod n,由欧拉定理可知x=m mod n。
又m 当m与n不互质时,由于n=p*q且m 若m=kp,则m^(q-1)=(k*p)^(q-1)=1 mod q。
接着[(k*p)^(q-1)]^[k*(p-1)]*kp=kp mod q,即(k*p)^(e*d)=k*p mod q。
又由于(k*p)^(ed)=k*q+k*p,(k*p)^(ed)=k*q*p+k*p,。
所以m^(ed)=m mod n,x=m。
即证。
----
现在考虑以下问题:
已知n和d,是否能将n分解?
可将这个问题分为几个问题:
1、已知n和f,是否能将n分解?
2、已知n,e和d,是否能得到f?
3、已知n和d,是否能得到e?
4、已知d和f,是否能得到e?
对于问题1的回答是肯定的。
n-f+1=sum=p+q,用二分法厉遍p,得p(sum-p)和n比较大小,即可快速确定p,q的值。
所以知道了n,f,就知道了p和q。也就是说,p,q,n,f四个数知道任意两个就可以知道全部。
那么,问题2就来了。如果p,q,n,f只知其一,又知道了e和d,是否能知道其它三个数呢?
最常见的情况就是知道了n,e和d。
由e*d=1 mod f,知e*d=k*f+1。
根据的同余方程定理可以知道存在k 并且d,k始终互质,由e,f互质又可推出e,k互质和f,d互质。
现在的问题又变为,e,d,f三个数各知道两个,能否知道第三个数?在已知n的情况下又是如何呢?
已知e,f可知道d,已知e,d不可知道f。
已知d,f,因为d,f互质,所以模逆e必存在,e必然在f的同余类中。又e 也就是说,e,f求d和d,f求e的过程是相同的。
这样,问题4的回答就是肯定的。
我们还可以发现,问题3的回答是否定的。
e和d对于f的地位是等价的,我们显然不可能用公匙n,e得到密匙n,d,所以反之亦然。
于是我们发现,f是十分重要的。知道了f,那么e和d就能互求。知道了f,那么n,p,q就能互求。
最后我们回到问题2。由于n,p,q的地位是等价的,我们可以换个死路考虑。
在已知p,e,d的情况下能否知道f和n?由e*d=k*f+1可以算出k*f。
然后又知道了p,可以算出k*(p-1)(q-1)/(p-1)=k*(q-1)。
然而这样组合的数量是很多的,如果不知打k,我们不可能知道q。所以知道p,e,d不能知道f或n。
那么知道n,e,d,也就是知道n和k*f,也就是知道p*q和k(p-1)(q-1)的情况下呢?
由于k是不可知的,k值的不同会导致f产生很大的变化。
我们虽然知道上限n,但直接拿f去除以n显然不能得到正确的k。
由于p和q的差值可能很大也可能很小,所以除出来的结果可能十分接近k也可能和k差很多。
于是无法缩小搜索p和q的范围,也无从使用二分法。
所以我认为,已知n,e,d是无法得到f的,同样也无法得到p和q。
如果大家有办法分解n的话,求详细的算法。
发表评论
-
https单向加密与双向加密区别
2015-05-23 11:04 2006源:http://edison0663.iteye.c ... -
Base64算法
2015-01-15 12:30 404源:http://blog.sina.com.cn/s/blo ... -
谷歌验证 (Google Authenticator) 的实现原理是什么?
2014-10-22 16:50 923源:http://www.zhihu.com/ques ... -
RSA算法原理(二)
2014-10-17 15:28 470源:http://www.ruanyifeng.com ... -
用实例给新手讲解RSA加密算法
2014-10-17 15:09 629源:http://www.cfca.com.cn/zh ... -
java 语言与 C语言端 AES (ECB)
2014-10-15 16:50 5215注:java 为no-padding 注释掉了 padding ... -
使用SSH遇到Authentication Refused: Bad Ownership or Modes for Directory
2014-10-07 17:17 954源:http://xwv.iteye.com/blog/189 ... -
获取osc动弹中人员的用户名,并@他,so easy
2014-10-23 11:39 354源:http://my.oschina.net/gll ... -
Nmap扫描原理与用法
2013-12-03 22:16 648源:http://blog.csdn.net/aspirati ... -
sql攻击跟如何防止
2013-02-22 13:34 493源:http://zhidao.baidu.com/ ... -
数字证书原理
2013-02-07 18:41 1033源:http://my.oschina.net/qinli ...
相关推荐
Java实现,公钥私钥通过计算生产,没有调用API,可以更直观的理解RSA公钥私钥的生成 资源中包含源码、jar包。不管是不想造轮子还是想要学习的同学都适用 也可以根据需要改造代码
C++书写,采用RSA加密算法,可生成公钥和私钥加密解密。
数据库密码的为了安全最后加密存放,这是一个RSA加密工具类。包含钥匙的生成和检测公钥私钥,具体看类说明,做Java或者Android可以直接拿来使用 非常方便!
通过RSA.PFX证书提取XML/PEM公钥私钥,源码,目前只支持PFX格式的提取,通过RSA.PFX证书提取XML/PEM公钥私钥,源码,目前只支持PFX格式的提取
C# RSA加密、支持JAVA格式公钥私钥
RSA非对称加解密算法,目前主流的加密算法,采用大数库生成大素数,然后根据算法原理,进行大数运算;算法在生成大素数时候相对耗时,但是在加解密的时候速度比较快,目前本算法支持512-2048位的加解密算法,并测试...
生成RSA公钥和私钥的工具:Windows版OpenSSL 亲测可用。提供32位系统和64位系统版本
RSA加密解密算法,可以实现现场的加密解密,可以更改公钥私钥。
RSA工具,很经典的软件,RSA算法计算工具,方便计算公钥、私钥
C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 对应文章: http://blog.csdn.net/gzy11/article/details/54573973
如果只是公钥解密和验证签名,那么可以不需要知道私钥指数(D),这在某些时候对方传过来N和E来解密和验签的时候非常管用(验证签名的时候需要核对签名算法)。 VS2008工程,完整的代码,可编译和验证通过。
获取RSA公钥+私钥
RSA 算法和实现 C/C++源码,随机产生大素数,计算公钥私钥,计算逆元,加密解密。
可以直接运行成功的RSA加密解密示例 JAVA端采用公钥加密,服务端C#采用私钥解密。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。...
用java代码生成公钥私钥密钥对,公钥加密私钥解密,私钥加密公钥解密。直接导入idea,可直接运行。小编正在看区块链的多重加密,看到这儿了就写了一个demo,用于理解加解密。
Java实现,没有直接调用KeyPairGenerator,自己使用BigInteger计算公钥私钥。 有源码有jar包,包含简单的Demo,不喜欢造轮子的可以直接引入jar包调用, 想要学习的也可以更直观的了解RSA公钥私钥生成及加密、解密...
亲测可用,可参考:https://blog.csdn.net/qq_37835111/article/details/87358779
利用System.Numerics.BigInteger实现,私钥加密,公钥解密。兼容PKCS1填充方式。有效文件只有MyRSA.cs一个,其它文件是因为带了一个演示窗口。
公钥密钥算法的软件实现,实现rsa的私钥选取,公钥生成,以及加密实现。