RSA加密算法python

RSA加密算法

欢迎访问本人私人博客,审核未通过文章将发布至个人博客:www.xuanworld.top

一、RSA简单介绍

RSA密码体制是根据PKC算法,并由美国麻省理工学院(MIT)的研究小组提出的,该体制的名称是用了3位作者Rivest,Shamir,Adleman英文名字的第一个字母拼合而成。该体制的理论基础是数论中的下述论断:要求得到两个大素数(如大到100位)的乘积在计算机上很容易实现,但要分解两个大素数的乘积在计算机上几乎不可能实现,即为单向函数

介绍来自度娘~

二、加密过程

  1. 选择一对不相等且足够大的质数,列如:选z1和z2为较大的两个质数
  2. 计算z1和z2的乘积,n=z1*z2
  3. 计算n的欧拉函数 ϕ ( n ) = ( z 1 − 1 ) ∗ ( z 2 − 1 ) \phi(n)=(z1-1)*(z2-1) ϕ(n)=(z11)(z21)
  4. 选一个与 ϕ ( n ) \phi(n) ϕ(n)互质的整数e,且 e < ϕ ( n ) e<\phi(n) e<ϕ(n)
  5. 算出e对于 ϕ ( n ) \phi(n) ϕ(n)的模反元素d
  6. 公钥:KU=(e,n),e和n是成对的,共同组成公钥
  7. 私钥:KR=(d,n),同上

使用方法:

明文M 加密 M e m o d      n = C M^e\mod\ n =C Memod n=C

密文C 解密 C d m o d      n = M C^d\mod\ n=M Cdmod n=M

三、概念解释

欧拉函数:

ϕ ( n ) \phi(n) ϕ(n)是小于n的正整数中与n互质的数的数目,注意:是互质数的个数,不是质数的个数

如果z1、z2都是质数,则 ϕ ( n ) = ( z 1 − 1 ) ∗ ( z 2 − 1 ) \phi(n)=(z1-1)*(z2-1) ϕ(n)=(z11)(z21)

互质

指公约数只有1的两个整数,叫做互质整数。

模反元素

如果两个正整数互质,如e和 ϕ ( n ) \phi(n) ϕ(n),那么一定可以找到一个整数d,使e*d-1被 ϕ ( n ) \phi(n) ϕ(n)整除,d就叫e的模反元素。

可写作:e*d-1=k* ϕ ( n ) \phi(n) ϕ(n)

或:e*d mod ϕ ( n ) = 1 \phi(n)=1 ϕ(n)=1

四、举例

例题一

RAS算法中,若选取两奇数p=5,q=3,公钥e=7,则私钥d为多少?

  1. 由p与q计算n,可得n=15
  2. 计算欧拉函数,得 ϕ ( n ) = ϕ ( 15 ) = 8 \phi(n)=\phi(15)=8 ϕ(n)=ϕ(15)=8
  3. 由e*d-1=k*8,k为正整数,得d=7

例题二

已知:

p = 3487583947589437589237958723892346254777

q = 8767867843568934765983476584376578389

e = 65537

求:

d=?

import gmpy2 as gm
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
d = gm.invert(e,(p-1)*(q-1)) #invert函数第一个参数为e,第二个为$\phi$
print(d)

验证

import gmpy2 as gm

p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
d = gm.invert(e, (p - 1) * (q - 1))
print("d:", d)
M = gm.mpz(114514)  # mpz将其压缩
C = pow(M, e, p * q)
print("C", C)
C = gm.mpz(C)
m = pow(C, d, p * q)
print("更改后", m)

成功输出加密文本:114514

验证成功!

结果

RSA加密算法python_第1张图片
来我博客!来我博客!www.xuanworld.top

你可能感兴趣的:(西电实验,网络安全,python,算法)