RSA算法

1. 对称加密与非对称加密

1.1、加密和解密过程

对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。

1.2、加密解密速度

对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。

1.3、传输的安全性

对称加密的过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获的,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。

非对称加密算法中私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高。

RSA算法简介

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。它的加密方式是用公钥进行加密,用私钥进行解密。

具体过程是:接收方拥有两把密钥,公钥和私钥,他把公钥发给发送方,发送方用公钥对要发送的信息(也就是明文)进行加密,然后把密文发给接收方,接收方再用私钥进行解密从而得到明文。

在这个过程中,私钥一直在接收方手里,即使在传输的过程中密文被截获,但截获方不知道私钥是什么,因此无法对密文进行解密,从而保证了信息的安全性。

对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。

到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

RSA加密过程

可以通过一张图来概括RSA公钥私钥的生成以及加密和解密的过程
在这里插入图片描述

3.1、质数和互质数

质数:除了能被1和他本身整除以外,不能其他任何数整除的数叫质数。

互质数:公因数只有1的两个数叫互质数。

互质数的判断方法:

(1)两个不同的数一定是互质数。例如:7和13,19和17

(2)相邻的两个自然数是互质数。例如:15和16

(3)相邻的两个奇数是互质数。例如:23和25

(4)较大那个数是质数的两个数是互质数。例如:88和97

(5)其中一个是质数,另一个不为它的倍数的两个数是互质数。例如:3和10,5和27

(6)2和任何互质数都是互质数。例如:2和67

(7)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908

3.2、模运算和模幂运算

模运算:也就是取余运算,两整数相除,取其中的余数作为结果,例如:5 mod 3 = 2 ,4 mod 2 = 0 。

模幂运算:先进行幂运算再进行模运算。例如:5^2 mod 3 -> 25 mod 3 = 1

3.3模反运算

如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a对模数n的“模反元素”。ab ≡ 1(mod n)
比如,3和11互质,由于 (3 × 4)-1 可以被11整除,所以3的模反元素就是4。显然,模反元素不止一个, 4加减11的整数倍都是3的模反元素 {…,-18,-7,4,15,26,…},即如果b是a的模反元素,则 b+kn 都是a的模反元素。

3.4RSA算法

公钥KU:
n: .两素数p和q的乘积(p和q必须保密)
e: 与(p-1)(q-1)互质的书。
私钥KR:
n: 两素数p和q的乘积(p和q必须保密)
d: ed = 1 末端((p-1)(q.-1)中 d 的值
加密:
c = m^e mod n
解密:
m=c^d mod n

算法描述

(1)选择一对不同的、足够大的质数 p ,q 。
假设p=61,q=53

(2)计算n=pq。
则n=61
53=3233

(3)计算 φ(n) = (p-1)(q-1) 。
φ(n) = 60*52 =3120

(4)随机选择一个整数e,但 e 要与 φ(n) 互质,并且 1< e < φ(n) 。
我们随机取一个互质数,e=17

(5)计算 d ,根据公式 de ≡ 1 (mod φ(n)) 来计算,此时d为e的模反元素,所以该公式等价于:ed–kφ(n)=1。
网上的脚本:

import math
def ex_gcd(a, b):
    if 0 == b:
        return 1, 0, a
    x2, y2, r = ex_gcd(b, a % b)
    temp = x2
    x1 = y2
    y1 = temp - int(math.floor(a / b)) * y2
    return x1, y1, r
a=17
b=3120
print(ex_gcd(a,b))

(6)公钥为:KU = (e,n),私钥为:KR = (d,n)
所以公钥KU=(17,3233),私钥KR = (2753,3233)

(7)加密时,把要加密的信息转化为小于n的数字m(可以去ascii或unicode值),如果信息非常长的话,可以把信息分为几段,然后每一段转换成数字m,然后再公钥进行加密:

c = m^e mod n

我们假设要发送的信息为一个字母“A”,我们先把“A”转换成ascii码65,

所以把公钥KU=(17,3233)代入公式得:

c = 65^17 mod 3233

然后得到密文c = 2790

(8)解密时用私钥进行解密:
m = c^d mod n

把私钥KR = (2753,3233)代入公式得:
m = 2790^2753 mod 3233

最后解出明文 m = 65,最后再转回字符“A”就行了

以上为转自这篇博客的文章,感觉对RSA算法写的很清楚易懂。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值