RSA加密算法

RSA加密算法

//为了做题应用可以看提炼简述,在文章末尾处

 

   RSA加密算法经典且应用广泛。计算机/软件/通信等行业应该难免会接触到它。我是在学习网络规划技术时了解并掌握它的。

   用过LINUX的人应该会熟悉ssh登录协议,并且认为ssh是安全的,ssh协议为什么安全?ssh 协议也是基于 RSA 加密算法才能确保通讯是加密的,可靠的。

   RSA算法是“非对称加密算法”,假如甲要和乙通讯,甲使用公钥 A 加密,将密文传递给乙,乙使用私钥 B 解密得到明文。其中公钥在网络上传递,私钥只有乙自己拥有,不在网络上传递,这样即使知道了公钥 A 也无法解密。反过来通讯也一样。只要私钥不泄漏,通信就是安全的,这就是非对称加密算法。

   对称加密算法:加密和解密使用同一套规则。例如:甲使用密钥 A 加密,将密文传递给乙,乙仍使用密钥 A 解密。如果密钥 A 在甲传递给乙的过程中泄露,或者根据已知的几次密文和明文推导出密钥 A,则甲乙之间的通讯将毫无秘密。

 

第一步:随机找两个质数 P 和 Q ,P 与 Q 越大,越安全。
计算他们的乘积 n = P * Q ,实际算法是 n一般为1024 位 或 2048 位,位数越长,算法越难被破解。
第二步:计算 n 的欧拉函数 φ(n)。
φ(n) 表示在小于等于 n 的正整数之中,与 n 构成互质关系的数的个数。例如:在 1 到 8 之中,与 8 形成互质关系的是1、3、5、7,所以 φ(n) = 4。
如果 n = P * Q,P 与 Q 均为质数,则 φ(n) = φ(P * Q)= φ(P - 1)φ(Q - 1) = (P - 1)(Q - 1) 。
记φ(n)为 m,
第三步:随机选择一个整数 e,条件是1< e < m,且 e 与 m 互质。
公约数只有 1 的两个整数,叫做互质整数,
请注意不要选择 e=(m-1),如果选这个,则公钥和私钥将变得相同。
第四步:找出有一个整数 d,可以使得 e*d 除以 m 的余数为 1。
即找一个整数 d,使得 (e * d ) % m = 1。%即mod,取余运算
等价于 e * d - 1 = y * m ( y 为整数)
找到 d ,实质就是对下面二元一次方程求解。
e * x - m * y =1 ,
这个方程可以用"扩展欧几里得算法"求解,此处省略具体过程。 总之算出一组整数解。
到此密钥对生成完毕。不同的 e 生成不同的 d,因此可以生成多个密钥对。
公钥为 (n,e) ,私钥为 (n,d) ,仅(n,e) 是公开的,其余数字均不公开。可以想像如果只有 n 和 e,非常难推导出 d,目前只能靠暴力破解,位数越长,暴力破解的时间越长。


加密生成密文 。
要求被加密的数字必须小于 n,被加密的数字必须是整数,字符串可以取 ascii 值或unicode值,
假设 a 为明文,b 为密文,则按下列公式计算出 b
a^e % n = b 

解密生成明文。
用自己的私钥(n,d) 解密。解密公式如下:
假设 a 为明文,b 为密文,则按下列公式计算出 a
a^d % n = b 

加密和解密的过程使用了费尔马小定理的两种等价的描述。

 

*提炼
1.取两个大质数P,Q
2.令n=P*Q, 则有φ(n) = (P - 1)(Q - 1)
3.选取1个整数e,1<e<φ(n), 且e与φ(n)互质
4.再找出1个整数d,使(e*d)% φ(n) = 1 ,这一步要计算,解方程算出d
5.则公钥 =(n,e), 私钥 = (n,d) . 选取不同的 e 可以生成不同的 d,因此可以生成多个密钥对

 

 

 

参考文章:

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

https://www.jianshu.com/p/fbb8bf7baa97

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值