from Kotori 学长の小测验 / from secret import flag from Crypto.Util.number import * # seed = bytes_to_long(flag) bits = seed.bit_length() while True: p = getPrime(bits + 1) if p > seed: break print(p) a = getRandomRange(1, p) b = getRandomRange(1, p) for _ in range(3): seed = (a * seed + b) % p print(seed) # 31893593182018727625473530765941216190921866039118147474754069955393226712079257707838327486268599271803 # 25820280412859586557218124484272275594433027771091486422152141535682739897353623931875432576083022273940 # 24295465524789348024814588142969609603624462580932512051939198335014954252359986260009296537423802567677 # 14963686422550871447791815183480974143372785034397446416396172429864269108509521776424254168481536292904 RSA的计算过程是: / 任选两个大质数p和q,p!=q,计算N=pq 计算N的欧拉函数r(n)=(p-1)(q-1) 任选一个e满足 1<e<r(n) ,且e与r(n)互质 找到d,使e*d/r(n)=x……1(x是多少不重要,重要的是余数为1)后丢弃p, 至此(n,e)为公钥,(n,d)为私钥 加密:C=Me(mod n);解密:M=Cd(mod n) 下述推导来自 (RSA 介绍 - CTF Wiki)
Read more