RSA生成密钥对的过程
一 点睛
RSA的加密是求“E次方的mod N”,解密是求“D次方的mod N”,这里提到了三个数——E、D和N,它们到底是怎样生成的呢?
由于E和N是公钥,D和N是私钥,因此求E、D和N这三个数就是生成密钥对。RSA密钥对的生成步骤如下:
1 求N
2 求L(L是仅在生成密钥对的过程中使用的数)
3 求E
4 求D
二 生成密钥对过程
1 求N
首先准备两个很大的质数。
这两个很大的质数为p和q。
p和q太小的话,密码会变得容易破译,但太大的话计算时间又会变得很长。例如,假设p和q的大小都是512比特,相对于155位的十进制数字。
要求出这样大的质数,需要通过伪随机数生成器生成一个512bit大小的数,再判断这个数是不是质数。如果伪随机数生成的数不是质数,就需要再用伪随机数重新生成另外一个数。
判断一个数是不是质数并不是看它能不能分解质因数,而是通过数学上的方法来完成,判断质数的方法包括费马测试和米勒.拉宾测试等。
准备好两个很大的质数之后,再将这两个数相乘,其结果就是数N。也就是说,数N可以用下列公式来表达。
N=p*q (p、q为质数)
2 求L
L这个数在RSA的加密和解密过程中都不会出现,它只出现在生成密钥对的过程中。
L是p-1和q-1的最小公倍数。如果用lcm(X,Y)来表示“X和Y的最小公倍数”,则L可以写成下列形式。
L=lcm(p-1,q-1)(L是p-1和q-1的最小公倍数)
3 求E
E是一个比1大,比L小的数。此外,E和L的最大公约数(gcd)必须为1.如果用gcd(X、Y)来表示X和Y的最大公约数,则E和L之间存在下列关系。
1<E<L
gcd(E,L)=1 E和L的最大公约数为1(E和L互质)
要找出满足gcd(E,L)=1的数,还是要使用伪随机数生成器。通过伪随机数生成器在1<E<L的范围内生成E的候选数,然后再判断是否满足gcd(E,L)=1这个条件。求最大公约数可以使用欧几里得的辗转相除法。
简单说,之所以要加上E和L的最大公约数为1这个条件,是为了保证一定存在在解密时需要使用的数D。
到此,已经求出了E和N,也就是说已经生成了密钥对中的公钥。
4 求D
数D是由数E计算得到的。D、E和L之间必须具备下列关系。
1<D<L
E*D mod L =1
只要数D满足上面条件,则通过E和N进行加密的密文,就可以通过D和N进行解密。
简单来说,E*D mod L =1 保证了对密文进行解密时能够得到原来的明文。
到此就求出了D和N,也就是说我们生成了密钥对中的私钥。
RSA生成密钥对的过程相关推荐
- [crypto]-51.1-python的aes加解密/rsa生成密钥对/rsa加解密/hmac加密
直接上代码 import base64 from Crypto.Cipher import AES import random import sys import os import hmac fro ...
- 使用RSA生成一对公钥和私钥
使用RSA生成一对公钥和私钥 package com.demoinfo.support.utils;import sun.misc.BASE64Decoder; import sun.misc.BAS ...
- php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)
/组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...
- GPG生成密钥对(Windows)及应用
安装Gpg4win,下载链接:https://download.csdn.net/download/zyhlwzy/11099228 1.生成密钥对 C:\WINDOWS\system32>gp ...
- gmssl国密sm2(生成密钥对-私钥签字-证书验签)
生成密钥对: #include <stdio.h> #include <string.h> #include <stdlib.h> #include "e ...
- Centos7中创建RSA非对称密钥对及搭建私有CA并为客户端颁发证书
Centos7中创建RSA非对称密钥对及搭建私有CA并为客户端颁发证书 1.在centos7中使用gpg创建RSA非对称密钥对 [13:32:55 root@centos7 data]#gpg --g ...
- jwt私钥和公钥怎么获取_如何为php-jwt生成密钥对?
我试图使用PHP-JWT生成JWT,但我总是最终收到错误: PHP Warning: openssl_sign(): supplied key param cannot be coerced into ...
- 仅需2张图,AI便可生成完整运动过程
金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 先给一张侧脸(关键帧1): 再给一张正脸(关键帧2): 然后仅仅根据这两张图片,AI处理了一下,便能生成整个运动过程: 而且不只是简单的那种 ...
- SFTP连接GCP,向服务器发送文件方法,第三方工具生成密钥对连接GCP服务器(putty生成密钥远程连接服务器)...
190223更新通过WinSCP工具导入key,向服务器发送文件方法: 很多时候需要向服务器发送文件,GCP和一般服务器不太一样,使用ftp和用户名密码不容易获取,一般采用秘钥的方式,下边介绍实现方法 ...
最新文章
- 参加软件测试培训前景怎么样
- Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?
- 功能基因多样性研究概述
- PAT乙级题目答案汇总PAT (Basic Level) Practice (中文)
- 42.Android之ListView中ArrayAdapter简单学习
- c++语言函数strcpy,C++中函数的安全版本的意义及strcpy函数的功能和差别(图)
- 闲鱼如何高效承接并处理用户纠纷
- 如何在data visualization 中update svg_如何操作小程序页面中data数据区中的数据
- 蓝桥杯2019年第十届C/C++省赛B组第一题-组队
- Operations Manager 2007 R2系列之单台服务器拓扑图监控
- IEEE论文模板(latex/word)
- 【Go语言核心手册14】结语参考文献
- 超硬核!数据结构学霸笔记,考试面试吹牛就靠它
- 一套键鼠控制多台电脑操作——Synergy软件(windows环境)
- iPad pro能运行c语言吗,办公实战 iPad Pro还是洗洗睡吧_平板电脑评测-中关村在线...
- QMetaObjectPrivate meta_constractors Q_INVOKABLE
- Docker 容器技术入门
- 网站后台主流架构设计参考(图文)
- linux下查找java进程占用CPU过高原因
- 互联网大陆的守夜人:信息加密技术