非对称加密算法RSA 学习

RSA加密算法是一种非对称加密算法。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。

对极大整数做因数分解的难度决定了RSA算法的可靠性。 换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。 但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

一、举一个通俗易懂的例子

看一个数学小魔术:

让A写下一个任意3位数,并将这个数和91相乘;然后将积的最后三位数告诉B,这样B就可以计算出A写下的是什么数字了。

  • 比如A写下的是123,并且A计算出123 * 91等于11193,并把结果的末三位193告诉B ;
  • B只需要把193再乘以11,193 * 11 = 2123 末三位就是A写下的数字了;

道理很简单,91乘以11等于1001,而任何一个三位数乘以1001后,末三位显然都不变(例如123乘以1001就等于123123)。

知道原理后,可以构造一个定义域和值域更大的加密解密系统。

例如:

  • 任意一个数乘以400000001后,末8位都不变,而400000001 = 19801 * 20201。于是A来乘以19801,B来乘以20201,又一个加密解密不对称的系统就构造好了;
  • 甚至可以构造得更大一些 4000000000000000000000000000001 = 1199481995446957 * 3334772856269093,这样我们就成功构造了一个30位的加密系统;

如果仅仅按照上面的思路,如果对方知道原理,非常容易穷举出400000001这个目标值;RSA算法使用的是指数和取模运算,本质上就是上面这套思想。

此段落转载自:

如何用通俗易懂的话来解释非对称加密?

二、一句话:

对极大整数做因数分解的难度决定了RSA算法的可靠性。

三、RSA加密算法

3.1、维基百科——RSA加密算法

先看一下维基百科的算法描述:

公钥与私钥的产生

  • 1、随意选择两个大的质数 p和 q,p不等于 q,计算 N=pq
  • 2、根据欧拉函数,求得 r
r = φ(N) = φ(p)φ(q) = (p-1)(q-1)
  • 3、选择一个小于r并与r互质的整数e,求得e关于r的模反元素,命名为d ( ed ≡ 1(mod r) 模反元素存在,当且仅当e与r互质 );
  • 4、销毁p和q,此时 (N , e)是公钥,(N, d)为私钥;

加密消息

假设Bob想给Alice发送一个消息 n,他知道Alice产生的 Ne ;用下面这个公式他可以将 n加密为 c

c ≡ n^e (mod N)

计算 c并不复杂。Bob算出 c后就可以将它传递给Alice。

解密消息

Alice得到Bob的消息 c后就可以利用她的密钥d来解码。可以用以下这个公式来将 c转换为 n

n ≡ c^d (mod N)

此段落转载自:

维基百科——RSA加密算法

3.2、依照算法公式举个例子

依照算法公式来举个例子

1、随意选择两个大的质数 p和 q,p不等于 q,计算 N=pq

质数 定义:

除了1和该数自身外,无法被其他自然数整除的数。

举例:

p = 3;
q = 5;
N = 3*5 = 15;

2、根据欧拉函数,求得 r

r = φ(N) = φ(p)φ(q) = (p-1)(q-1)。

欧拉函数 定义:

欧拉函数 φ(n)是小于或等于n的正整数中与n互质的数的数目。

例如:φ(8) = 4,因为1,3,5,7均和8互质。

举例:

r = φ(N) = φ(p)φ(q) = (p-1)(q-1) ;

r = φ(15) = φ(3)φ(5) = (3-1)(5-1) ;
r = 8

3、选择一个小于r并与r互质的整数e,求得e关于r的模反元素,命名为d ( ed ≡ 1(mod r) 模反元素存在,当且仅当e与r互质 );

互质 定义:

如果两个或两个以上的整数的最大公约数是 1,则称它们为互质

例如:1,3,5,7均和8互质

模反元素 定义:

如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。

例如:比如3和5互质,3关于5的模反元素就可能是2,因为 (3*2)%5=1 。

举例:

// 选择一个小于r并与r互质的整数e (1,3,5,7均和8互质):
e = 7;
// 求得e关于r的模反元素,命名为d ( ed ≡ 1(mod r) ) ed ≡ 1(mod r) ; 7*d ≡ 1(mod 8) ;
7*d%8 = 1;
// 这里取d = 15
d = 15;

4、销毁p和q,此时 (N , e)是公钥,(N, d)为私钥

// 公钥  (N , e)
( 15,7 )
// 私钥 (N, d)
( 15,15 )

5、加密

假设Bob想给Alice发送一个消息 n,他知道Alice产生的 Ne ;用下面这个公式他可以将 n加密为 c

举例:

// 假设
n = 2;
// 计算c
c ≡ n^e (mod N) ; (c^-1 * n^e)%N = 1 ;
(c^-1 * 2^7)%15 = 1 ;
//
c = 8;

6、解密

Alice得到Bob的消息 c后就可以利用她的密钥d来解码。可以用以下这个公式来将 c转换为 n

举例:

// 计算n
n ≡ c^d (mod N) n ≡ 8^15 (mod 15) ;
(n^-1 * 8^15)%15 = 1 ;
//
n = 2;

参考

如何用通俗易懂的话来解释非对称加密?

维基百科——RSA加密算法

RSA算法详解

========== THE END ==========

非对称加密算法RSA 学习的更多相关文章

  1. 非对称加密算法RSA使用注意事项

    原文:非对称加密算法RSA使用注意事项 第一个问题,也是最重要的一个——RSA无法对超过117字节的数据进行加密!切记!其实也勿需要求对更大数据的加密,虽然网上已经有相关解决方案,比如BigInteg ...

  2. Java进阶(七)Java加密技术之非对称加密算法RSA

    Java加密技术(四)--非对称加密算法RSA 非对称加密算法--RSA 基本概念 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(priv ...

  3. 非对称加密算法-RSA算法

    一.概述 1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现 2.java6支持RSA算法 3.RSA算法可以用于数据加密和数字签名 4.RSA算法相对于DES/AES等对 ...

  4. JAVA 非对称加密算法RSA

    非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAP ...

  5. Java加密技术(四)非对称加密算法RSA

    RSA      这样的算法1978年就出现了.它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作.也非常流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir ...

  6. 非对称加密算法-RSA

    注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 12.1.RSA(最经典的非对称加密算法) 特点: 使用一套密钥即可完成加解密(与D ...

  7. 信息加密之非对称加密算法RSA

    前面为大家已经总结了,基于密钥交换的DH算法,现在就为大家再介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1.公钥加密,私钥解密:2.私钥加密,公钥解密.下面就为大家分析一下实现代码, ...

  8. 第十二章 非对称加密算法-RSA

    注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 12.1.RSA(最经典的非对称加密算法) 特点: 使用一套密钥即可完成加解密(与D ...

  9. openssl 非对称加密算法RSA命令详解

    1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很 ...

随机推荐

  1. axios 模拟同步请求

    axios本身没有同步请求,但是我们很多情况下必须得需要同步请求.那么应该怎么做? 上网查了一些资料有人说用es6的 async +  assert 我不知道有没有效果,因为我的功能中是没啥效果的. ...

  2. 算法笔记4.3递归 问题 A: 吃糖果

    问题 A: 吃糖果 题目描述 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0). 妈妈告诉名名每天可以吃一块或者两块巧克力. 假设名 ...

  3. [LC] 222. Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Note: Definition of a complete binary tree ...

  4. [LC] 144. Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...

  5. 机器人可以拥有社交智能吗?——微软雷德蒙研究院院长Eric Horvitz与他的个人虚拟助理之梦

    Horvitz与他的个人虚拟助理之梦" title="机器人可以拥有社交智能吗?--微软雷德蒙研究院院长Eric Horvitz与他的个人虚拟助理之梦">编者按:到 ...

  6. CF-551:部分题目总结

    题目链接:http://codeforces.com/contest/1153 A .Serval and Bus pro:给出n种公交车的首班车时间和两班车之间的时间间隔,找t时间以后的第一辆车是第 ...

  7. 01_JDK的下载-安装-配置

    下载 https://www.oracle.com/technetwork/java/javase/downloads/index.html 安装 1.安装路径不要有空格(去除安装路径中的Progra ...

  8. python掉包侠与深浅拷贝

    今日所得 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝 包 在学习模块的时候我们了解过模块的四种表现形式,其中的一种就是包. 什么是包? 它是一系列模块文件的结合体,表示 ...

  9. windows 不能在本地计算机启动apache2。有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1

    今天使用apache的时候又无法启动了,之前也遇到过,这次重点说这一次的情况,其他情况可以查看博主apache相关的其他博文:网上关于apache服务端的设置的很多,但是都不适合我的情况: 一般使用a ...

  10. 3DSMAX卸载/完美解决安装失败/如何彻底卸载清除干净3DSMAX各种残留注册表和文件的方法

    在卸载3dsmax重装3dsmax时发现安装失败,提示是已安装3dsmax或安装失败.这是因为上一次卸载3dsmax没有清理干净,系统会误认为已经安装3dsmax了.有的同学是新装的系统也会出现3ds ...