1、什么是RSA?

RSA是一种公钥密码算法,它的名字由三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的。 RSA被用于公钥密码和数字签名。 1983年,RSA公司为RSA算法在美国取得了专利,但现在该专利已经过期。

2、算法原理介绍

step 说明 描述 备注
1 找出质数 P 、Q -
2 计算公共模数 N = P * Q -
3 欧拉函数 φ(N) = (P-1)(Q-1) -
4 计算公钥E 1 < E < φ(N) E的取值必须是整数
E 和 φ(N) 必须是互质数
5 计算私钥D E * D % φ(N) = 1 -
6 加密 C = ME mod N C:密文 M:明文
7 解密 M =CD mod N C:密文 M:明文

3、算法举例

  • 随机选择两个不相等的质数 : p=61、q=53
  • 计算 n = p × q = 61×53 = 3233
  • 计算n的欧拉函数 : φ(n) = (p-1)(q-1) = 3120
  • 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质, 我们选择一个 e=17
  • 计算e对于φ(n)的模反元素d : d*e%φ(n)=1

支持 n e d都算出来了,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)

公钥能否推导出私钥,也就是n和e的情况下,推导出d

  • (1)ed%φ(n)=1, 推导d, 需要知道e和φ(n)
  • (2)φ(n)=(p-1)(q-1)。计算φ(n), 需要知道p和q
  • (3)n=pq。只有将n因数分解,才能算出p和q.

私钥能否推导出公钥,也就是n和d的情况下,推导出e

  • (1)ed%φ(n)=1, 推导e, 需要知道d和φ(n)
  • (2)φ(n)=(p-1)(q-1)。计算φ(n), 需要知道p和q
  • (3)n=pq。只有将n因数分解,才能算出p和q.

对于3233您可以进行因数分解(3233=61×53),那么对于下面一个这样很大的数字呢?

12301866845301177551304949
  58384962720772853569595334
  79219732245215172640050726
  36575187452021997864693899
  56474942774063845925192557
  32630345373154826850791702
  61221429134616704292143116
  02221240479274737794080665
  351419597459856902143413

它等价于:

33478071698956898786044169
  84821269081770479498371376
  85689124313889828837938780
  02287614711652531743087737
  814467999489
    ×
  36746043666799590428244633
  79962795263227915816434308
  76426760322838157396665112
  79233373417143396810270092
  798736308917

公钥(e,n)对明文m进行加密 : c = m^e % n
私钥(d,n)对密文c进行解密 : m = c^d % n

其中e和d是对等的,一样的地位,可以互换的. 所以,公钥推出私钥比较困难,那么私钥推出公钥也是比较困难.
另外,在密码学中,我们一般不说通过公钥并不是完全不能推算出私钥, 而是表述为:通过公钥推算私钥在计算上是困难的。

那么为什么我们在平时使用时,感觉的是公钥不能推导私钥,但私钥可以推导公钥呢?
因为在PEM或DER的编码格式中,公钥包含了N和E,私钥包含了N E D P Q等信息,也就是私钥已经包含了公钥,故私钥是能推出公钥的。
另外在通常使用中,e一般就等于65535,所以无需推导.

4、RSA的用法

公钥加密、私钥解密
私钥签名、公钥验签

05-密码学基础-RSA的介绍相关推荐

  1. 密码学基础知识-数论(从入门到放弃)

    数论知识 本文主要介绍整除.质数和合数.同余定理.模逆元素.欧几里得除法.欧拉函数.欧拉定理.费马小定理.中国剩余定理(孙子定理). 文章目录 数论知识 简介 一.整除 二.质数和合数 三.同余定理 ...

  2. 【笔记】公钥密码学之RSA

    数论基础 素数 1.定义: 一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数):否则称为合数. 如:3×4 = 12,不是素数.11除了等于11×1以外,不能 ...

  3. 密码学:RSA加密算法详解

    概述 本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Q-WHai 发表日期: ...

  4. http、https、密码学基础、GET和POST区别

    http协议相关: http协议的特性: http协议是建立在TCP/IP协议之上应用层协议,默认端口为80或者8080.http协议的的特点是无状态,无连接(并不是真的没有连接,而是在请求数据的时候 ...

  5. 重力传感器 测重力代码_“重力瀑布”如何帮助您教授孩子的密码学基础知识...

    重力传感器 测重力代码 by Kamil Tustanowski 通过卡米尔·图斯坦诺夫斯基 "重力瀑布"如何帮助您教授孩子的密码学基础知识 (How "Gravity ...

  6. android log 如何获取double类型后小数点的值_【ES6基础】Symbol介绍:独一无二的值...

    开篇 ES6之前我们都清楚JS有六种数据类型:Undefined.Null.布尔值(Boolean).字符串(String).数值(Number).对象(Object),今天笔者讲的Symbol类型是 ...

  7. 计算机基础(07)密码学基础

    今天的我们只要接触密码学相关的信息,那一定是经常会听说各种密钥啊,之类的,但这个东西到底是怎么发展来的呢?这里我们从密码学的发展.古典密码学和现代密码学等角度搞清楚密码学到底是怎么发展的,以及为什么后 ...

  8. 开发过程中那些不得不知道的密码学基础

    Java密码学基础 发展历史 古典密码学 如凯撒密码.滚筒密码 近代密码学 如德国Enigma机,被图灵破解 现代密码学 编码算法 不是加密和解密,为了在网络间更方便的传输数据/本地存储字节数组而产生 ...

  9. PrivacyIN Week1课程回顾 | 张宇鹏博导开讲零知识证明密码学基础研究导论

    转自:PrivacyIN 隐私学院 前言 隐私学院[PrivacyIN]第一期ZK训练营课程精讲内容上线啦,本期课堂邀请到美国德州农工大学(Texas A&M University)计算机科学 ...

最新文章

  1. python运算符(算数运算符、赋值运算符、复合赋值运算符、比较运算符、逻辑运算符)
  2. html 写字版插件,JS+HTML5 Canvas实现简单的写字板功能示例
  3. 在jexus下如何简单的配置多站点
  4. 【软件工程实践 · 团队项目】 第一次作业
  5. Atiti 高并发程序设计 艾提拉著 目录 1. 第—部分 基础知识 2 1.1.  第1章 并行计算机的硬件基础   1.1 并行计算机的组成   1.2 共享存储器多处理器系统   1.3 消
  6. java反射机制面试详解
  7. Ubuntu安装和显卡驱动安装
  8. Anycubic Vyper 3D打印机串口屏改造开源项目之串口屏项目启动篇(一)
  9. 制作flash动画心得
  10. Prometheus Operator开始
  11. mac 设置mysql登录快捷键_史上最详细的苹果Macbook快捷键使用
  12. hive中的distribute by
  13. Scrapy框架爬取下载王者荣耀英雄壁纸
  14. 【源码】elfun18:计算各种椭圆积分和函数
  15. 西门子LOGO PLC的通讯、数据采集知识及PLC-Recorder连接方法
  16. dnf剑魂buff等级上限_DNF:半年前没人看得上,如今被开发成T0,这神话终于翻身了...
  17. uni-app 数据循环
  18. python上机实验10
  19. 打造自己的无人船(1)——树莓派环境搭建
  20. 高等统计物理考题--证明二维情况下不存在玻色爱因斯坦凝聚

热门文章

  1. 冷板式液冷--术语、定义和缩略语(6-1)
  2. 投资100亿美元,谷歌计划在2020年向美国办事处和数据中心
  3. 华擎b365m itx 黑苹果_迷你ITX小机箱装机实录,黑苹果首选
  4. vue 可视化布局工具_GitDataV一款Github的'大数据可视化平台'
  5. 成功解决Exception “unhandled ImportError“cannot import name ‘imread‘ from ‘scipy.misc‘
  6. 成功解决Exception unhandled OSError cannot open resource File: F:\Program Files\Python\Python36\Lib\si
  7. 《疯狂Java讲义》10
  8. 动态规划:求最长公共子序列和最长公共子串
  9. 429. N-ary Tree Level Order Traversal - LeetCode
  10. 【Python】python 反射机制在实际的应用场景讲解