python实现RSA加密(原理+代码)

一.RSA算法简介

  RSA算法属于分组加密方案,也就是说明文以分组为单位加密,分组的大小取决于所选的模n的值,明文块每个分组的长度可以相同也可以不同,但是,各分组大小必须小于或等于log2(n)的值。已知明文的某块分组报文M,公钥(e,n),私钥(d,n),则加密过程如下:对M的e次方幂指数运算结果再做模n运算,所得结果即为密文C。

二.RSA算法的数学理论依据

1. 费玛(Fermat)定理

描述1:若p是素数,a是正整数且不能被p整除,则 a^p-1≡ 1 mod p
描述2:对于素数p,若a是任一正整数,则 a^p ≡ a(mod p)
例1.1 设p=3,a=2,则2^2=4 ≡ 1 (mod 3)或 2^3=8≡2(mod 3)
例1.2 设p=5,a=3,则3^4=81 ≡ 1(mod 5)或 3^5=243≡3(mod 5)

2. 欧拉函数:

正整数n的欧拉函数是指小于n且与n互素的正整数个数,通常记为Ø(n)。
对于任一素数p,显然有:Ø( p) = p – 1,
例如:
设p=3,小于3且与3互素的正整数为1,2,因此Ø(3) = 2;类似地,当p=7时,小于7且与7互素的正整数为1,2,3,4,5,6,因此Ø(7) = 6

假定有两个不同的素数p和q,n是p与q之积,即 n = p × q,则有如下公式关系:
Ø(n)=Ø(pq)= Ø( p)×Ø(q)=(p-1)×(q-1)
例如:
取n=21,Ø(21) = Ø(3) × Ø(7) = (3-1) × (7-1) = 2 × 6 = 12,其中这12个整数是{1,2,4,5,8,10,11,13,16,17,19,20 }

3.欧拉定理:

任何两个互素的整数a和n,有如下关系:
a^Ø(n) ≡ 1 mod n
例如:
a = 3;n=8;由(3)欧拉函数的定义,
Ø(8) = 4;则
a^Ø(n) = 34 = 81 =10×8 +1 ≡ 1 mod 8 ≡ 1 mod n

三.RSA算法举例

在这里插入图片描述

四.代码实现

n,p,q,e=55,5,11,7
phi=(p-1)*(q-1)
for d in range(1,1000):
    if (7*d)%phi!=1:
        d = d + 1
    else:
        break
m=int(input('请输入明文:'))
c1=(m**e)%n
c=int(input('请输入密文:'))
m1=(c**d)%n
print('经加密得到的密文为:'+str(c1))
print('经解密得到的明文为:'+str(m1))

五.输出结果:

请输入明文:10
请输入密文:35
经加密得到的密文为:10
经解密得到的明文为:30

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值