作者:刘巍然-学酥
链接:http://www.zhihu.com/question/25912483/answer/31653639
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我们来回顾一下RSA的加密算法。我们从公钥加密算法和签名算法的定义出发,用比较规范的语言来描述这一算法。

RSA公钥加密体制包含如下3个算法:KeyGen(密钥生成算法),Encrypt(加密算法)以及Decrypt(解密算法)。

  • 。密钥生成算法以安全常数作为输入,输出一个公钥PK,和一个私钥SK。安全常数用于确定这个加密算法的安全性有多高,一般以加密算法使用的质数p的大小有关。越大,质数p一般越大,保证体制有更高的安全性。在RSA中,密钥生成算法如下:算法首先随机产生两个不同大质数p和q,计算N=pq。随后,算法计算欧拉函数。接下来,算法随机选择一个小于的整数e,并计算e关于的模反元素d。最后,公钥为PK=(N, e),私钥为SK=(N, d)。
  • 。加密算法以公钥PK和待加密的消息M作为输入,输出密文CT。在RSA中,加密算法如下:算法直接输出密文为
  • 。解密算法以私钥SK和密文CT作为输入,输出消息M。在RSA中,解密算法如下:算法直接输出明文为。由于e和d在下互逆,因此我们有:

所以,从算法描述中我们也可以看出:公钥用于对数据进行加密,私钥用于对数据进行解密。当然了,这个也可以很直观的理解:公钥就是公开的密钥,其公开了大家才能用它来加密数据。私钥是私有的密钥,谁有这个密钥才能够解密密文。否则大家都能看到私钥,就都能解密,那不就乱套了。

 

=================分割线=================

我们再来回顾一下RSA签名体制。签名体制同样包含3个算法:KeyGen(密钥生成算法),Sign(签名算法),Verify(验证算法)。

  • 。密钥生成算法同样以安全常数作为输入,输出一个公钥PK和一个私钥SK。在RSA签名中,密钥生成算法与加密算法完全相同。
  • 。签名算法以私钥SK和待签名的消息M作为输入,输出签名。在RSA签名中,签名算法直接输出签名为。注意,签名算法和RSA加密体制中的解密算法非常像。
  • 。验证算法以公钥PK,签名以及消息M作为输入,输出一个比特值b。b=1意味着验证通过。b=0意味着验证不通过。在RSA签名中,验证算法首先计算,随后对比M'与M,如果相等,则输出b=1,否则输出b=0。注意:验证算法和RSA加密体制中的加密算法非常像。

所以,在签名算法中,私钥用于对数据进行签名,公钥用于对签名进行验证。这也可以直观地进行理解:对一个文件签名,当然要用私钥,因为我们希望只有自己才能完成签字。验证过程当然希望所有人都能够执行,大家看到签名都能通过验证证明确实是我自己签的。

  相关实现源码地址:http://download.csdn.net/detail/zyw_java/9549541

最新文章

  1. Atitit.数据检索与网络爬虫与数据采集的原理概论
  2. Javascript面向对象编程(二)--- 构造函数的继承
  3. 如何避免Activity 被杀死
  4. codeforces 489B. BerSU Ball 解题报告
  5. javascript双击事件取消默认的两次单击事件
  6. (转)IOS之Info.plist文件简介
  7. poj3252
  8. ExtJS智能提示工具spket安装与破解
  9. IOS web app一些实用的属性设置
  10. OC--设置视图控制器,从导航栏的下边缘开始
  11. PHP 序列化与反序列化函数
  12. HiWord()
  13. 【经验随笔】Java程序远程调试定位特定运行环境上出现的问题
  14. SVN的使用说明
  15. 基础知识-Mockjs进行数据模拟
  16. windows平台下实现高可用性和可扩展性-ARR和HLB
  17. http协议中的请求方式
  18. Delphi7使用一段时间后抽风提示注册
  19. oracle(2)
  20. from表单文件上传后页面跳转解决办法

热门文章

  1. 洛谷——P2071 座位安排 seat.cpp/c/pas
  2. EL和JSTL的关系
  3. Django 如何实现 如下 联表 JOIN 查询?
  4. Ubuntu16.04安装mongodb 及使用
  5. BZOJ [JSOI2008]星球大战starwar
  6. ZOJ 3707 Calculate Prime S 数论
  7. USACO 2017 FEB Platinum mincross 可持久化线段树
  8. HDU 5673 Robot 数学
  9. HDU 5653 Bomber Man wants to bomb an Array. dp
  10. iptables数据包、连接标记模块MARK/CONNMARK的使用(打标签)