题目
from Crypto.Util.number import *
def generkey(k):
p, q = getPrime(k), getPrime(k)
pubkey = p**2 * q
n = pubkey
l = (p-1)*(q-1) / gcd(p-1, q-1)
privkey = inverse(n, l)
return pubkey, privkey
def encrypt(m, pubkey):
return pow(bytes_to_long(m), pubkey, pubkey)
# pubkey =
# privkey =
# enc =
Schmidt-Samoa密码系统
Schmidt-Samoa密码系统,像rabin加密一样,其安全性基于整数因式分解的难度。但 Rabin 解密时会得到四个解,而 Schmidt-Samor 得到的是唯一解。
注:此次所提n与之前不同,但phi不变。
密钥生成
1.选取两个大素数p,q,计算n。
2.计算私钥d
phi=(p-1)*(q-1)
加密
解密
关于获取pq的问题
根据密钥生成的公式,结合欧拉定理可知:
本站所提phi均为(p-1)*(q-1)
所以:
接着:
又因为:
所以就有:
因为a的取值可以是 a = 2,3,4,5…,这里方便计算我们取 2
解题
对于此题,不必麻烦去求p*q,因为给的n可以通过在线网站分解,直接得到p,q,所以只要看得出这个题是Schmidt-Samoa密码系统,就很简单了。
代码就不放了,知道p,q还解不出?!
成功拿到flag!!!