rsa当e=2且不互素时处理方式

  1. 整个过程简化为6步

整个过程简化为6步

  • 1、运用广义Euclid除法,求出整数s和t使得sp+tq=1
  • 2、计算u≡c**((p+1)/4) (mod p)
  • 3、计算v≡c**((q+1)/4) (mod q)
  • 4、计算x≡(tqu+spv) (mod n)
  • 5、计算y≡(tqu-spv) (mod n)
  • 6、同余式x**2≡c (mod n) 的四个根是x,-x(mod n),y,-y(mod n)
  • 其中一个根即为密文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# -*-coding: utf-8 -*-  
import gmpy

def n2s(num):
t = hex(num)[2:]
if len(t) % 2 == 1:
return ('0'+t).decode('hex')
return t.decode('hex')

c = int(open('flag.enc','rb').read().encode('hex'),16) # 密文 c
p = 275127860351348928173285174381581152299 # 分解后的素数 p
q = 319576316814478949870590164193048041239 # 分解后的素数 q
n = p*q # 公钥 N

# 根据中国剩余定理求解相应明文
r = pow(c,(p+1)/4,p)
s = pow(c,(q+1)/4,q)
a = gmpy.invert(p,q)
b = gmpy.invert(q,p)
x =(a*p*s+b*q*r)%n
y =(a*p*s-b*q*r)%n

# 打印明文
print n2s(x%n)
print n2s((-x)%n)
print n2s(y%n)
print n2s((-y)%n)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1259742453@qq.com

💰

×

Help us with donation