rsa算法举例_RSA算法从数学基础到实例全面解析

本文详细介绍了RSA算法的基础知识,包括同余概念、欧拉函数、费马小定理、模反、扩展欧几里得算法以及密钥生成和加解密过程。通过实例展示了如何使用Python实现RSA算法,帮助读者深入理解该加密算法的工作原理。
摘要由CSDN通过智能技术生成

1、同余(合同式)

转载请注明http://blog.csdn.net/boksic 如有疑问欢迎留言

两个整数a,b,若它们除以正整数m所得的余数相等,则称a,b对于模m同余

记作

FJBBFf.png

例如1≡13 (mod 12),可以理解为时钟上1点和13点的指针位置相同

重要性质

yuIZNj.png

例如1^5=1,13 ^5=371293=30941*12+1

即1^5≡1≡13 ^5(mod 12)

2、欧拉函数(Euler’s totient function)

欧拉函数 φ(n)是少于或等于n的数中与n互质的数的数目,例如φ(9) = 6,因为比9小的数中与9互质的有1, 2, 4, 5, 7,8六个数,所以9的欧拉函数为6。

计算方法:

将n分解为质数相乘的形式

j6j22q.png,每个pi都是质数

则欧拉函数

UfQNb2.png

3aauAb.png

例如

FF7Bvi.png

两条结论

若n为质数,则φ(n)=n-1

若m与n互质,则 φ(mn) = φ(m)φ(n)

3、费马小定理与欧拉定理

费马小定理

若a为整数,p为质数则

aE7nI3.png

如果a不是p的倍数,可写为

UBB7F3.png

推广:欧拉定理

对任何两互质正整数a, m,

JfY7Fv.png,有

IbQNfi.png

4、模反

a的模反(模m)即满足下列等式的x

ye2Uji.png

或写成

iIrm6f.png

例如

IFb6Fb.png

MbAVj2.png

当x=4时上式成立,所以4是3的模反,

注意:4并不是唯一的解,在4的基础上加上模(11)的倍数依然满足上式,例如15,26,37,48等

但是寻找这样的x并不是一目了然,可以用下面的扩展欧几里得算法。

5、扩展欧几里得算法

作为欧几里得算法的扩展,寻找的是满足

ax + by = gcd(a,b)的x和y。

当a,b互质时,可以看出x是a在b模下的反(ax=1(mod y)) ;可以看出y是b在a模下的反(by=1(mod x))

我用python写了一个递归实现

def extended_gcd(a, b):

if (b == 0):

return (1, 0)

else:

q, r = a/b,a%b

s, t = extended_gcd(b, r)

return (t, s - q * t)

运行实例,还是拿上面的例子,求3在模11下的反

print extended_gcd(3,11)

得到结果:

(4, -1)

意即4*3+(-1)*11=1

因此可得

MbAVj2.png的解为4

6、密钥生成

选取两个素数p和q

计算n=pq

计算φ(n) = (p – 1)(q – 1)(可由2中的两个结论推出)

选取e使得 1 < e < φ(n)且e与φ(n)互质,e和n作为公钥

计算 d =e–1 mod φ(n); d和n作为密钥

7、加密

将公钥(n,e)传送给对方,自己保留密钥。对方对明文进行加密。

明文m,密文c,由密钥(n,e)可得

c = me (modn).

8、解密

收到对方传过来的密文c后可以用密钥(d,n)进行解密,得到明文m

m = cd (modn).

9、实现

用python把流程走一遍

>>> from Euclid_Ex import extended_gcd

#导入上面定义的扩展欧几里得算法

>>> p,q=61,53

#定义p,q,并求得n和phi

>>> n=p*q

>>> n

3233

>>> phi=(p-1)*(q-1)

>>> phi

3120

#选择17作为公钥

>>> e=17

#计算密钥

>>> extended_gcd(e,phi)

(-367, 2)

#计算得到的是负数,不是我们所想要的,按照之前提过的,只要加上模就可以了

>>> -367+phi

2753

#得到了密钥为2753

>>> d=2753

#在此已经得到了加密和解密所需要的密钥(d,n)和公钥(e,n)了,下面对明文m进行加解密

>>> m=65

>>> c=m**e%n

>>> c

2790L

#明文由公钥加密后得到密文2790

>>> m=c**d%n

>>> m

65L

#密文由密钥解密后得到明文65,与之前的信息一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值