您的位置 首页 java

浅谈RSA加密

说到加密,目前比较常见的有对称加密和非对称加密,那什么是对称加密和非对称加密呢,如图

浅谈RSA加密

对称加密

假如 一个人A想把信息m发给B 他不能直接把m给B,不然会被窃听到,所以A经过一个算法,比如+e,得到C,

然后A把这个C发送给B,B收到C之后,通过 -e 的方式就得到了信息m

(例如: A想把数字 2 传给B, A通过+1的方式把 3 传给了B, B收到 3 之后,通过-1的方式就得到了 2 )

浅谈RSA加密

m 是明文,就是我们要传递的信息

e 是密钥,就是加密的算法,是需要保密的

C 是密文,就是加密之后的信息

这个C可以是公开的,但由于不知道你的密钥,所以就没有办法知道要传递的m

简单来说就是通过e加密,也通过e去解密

非对称加密

还是这个例子,一个人A想把信息m发给B,B生成了两个有关系的e 和 d ,e称为公钥,d称为 私钥 ,B可以通过公开的方式把e发给A

A通过e里面的某一个算法 例如+e 对m进行加密得到C,A也可以通过公开的方式把C发送给B,不对称的就不对称到这,B收到之后通过不是通过-e的方式,而是-d的方式,得到了信息m

也就是说 通过e加密,然后用d去解密

RSA

其中一个最经典的非对称就是 RSA加密算法 ,那这个RSA是基于什么原理,公钥e和私钥d有一个怎么样的关系呢

首先 B先找出两个质数 p和q

计算 n = p * q

φ(n) = (p-1) * (q-1) 这个函数又叫欧拉函数

公钥e 1 < e < φ(n) 在这个范围取出一个整数,并且 e 和 φ(n) 互质

私钥d (e * d ) / φ(n) = x ······ 1 (x是几无所谓, 余数必须是1 ,比如 φ(n)是20 e是3 那么d就是7)

加密 m^e / n =x ······ c (这几个x都代表任意数的商,在这里面没有直接意义,可以忽略不看,这三个x也都不相等)

解密 c^d / n =x ······ m (可以从数学上证明,经过这一系列的计算,得到结果的余数一定是m)

安全性

首先我们先知道 A 和 B都知道哪些东西,B会把公钥e 和一个大数n 传给A,而B自己会留下一个私钥的d和一个相同的大数n,而A会把密文c传给B

由于n,e,c是知道的 是可以公开的,但是不知道私钥d,是很难破解出要传递的信息m的

那能不能通过公钥e去破解私钥d呢?

如果用e破解d,那么你首先知道φ(n)等于多少,想求出φ(n)的话,就必须知道 p 和 q

由n = p * q 我们也知道n,也知道p和q是质数,要求出p和q,这个过程是 质因数分解

一个小数的质因数分解很简单(比如 21 = 3 * 7),但是一个大数的质因数分解却很难,更何况1024位的大数n呢(目前还没有人类能做出来)

由于这个原因,所以人们才认为 RSA算法 是比较保密的

那有没有什么方式可以快速的计算大数的质因数分解呢?

如果用我们普通的计算机去计算这个大数的质因数分解的话,大概需要10年的时间,才能算出来,当然如果用 量子计算机 的,可能一个星期就算出来了。

希望我的理解对您有所帮助!

文章来源:智云一二三科技

文章标题:浅谈RSA加密

文章地址:https://www.zhihuclub.com/196927.shtml

关于作者: 智云科技

热门文章

网站地图