老牌刺客之王混进了女王的住所。一天,女王得到了一个匿名举报,说她的侍卫里有一个刺客,叫做Rabin,而他的信息就在一份文件里,文件中有附带一个Pk,是523798549,密文是162853095,校验码二进制值是110001,根据说明是放在明文后一起加密的,明文与密文长度相同。加密算法和这位老牌刺客同名。
根据题意为Rabin算法,解码如下:
import gmpy2
c = 162853095 # 密文 c
p = 49123 # 分解后的素数 p
q = 10663 # 分解后的素数 q
n = p*q # 公钥 N
# 根据中国剩余定理求解相应明文
r = pow(c,(p+1)/4,p)
s = pow(c,(q+1)/4,q)
a = gmpy2.invert(p,q)
b = gmpy2.invert(q,p)
x =(a*p*s+b*q*r)%n
y =(a*p*s-b*q*r)%n
# 打印明文
print x%n
print (-x)%n
print y%n
print (-y)%n
求得309480113,即0b10010011100100100101010110001,剔除校验位0b110001,为0b10010011100100100101010