这是个加密程序,生成密钥一个e,n1,n2,在用RSA加密,这里程序给出了e,n1,n2,c1,c2,求明文
from Crypto.Util.number import *
import gmpy2
from flag import FLAG
def keygen(nbit, dbit):
if 2*dbit < nbit:
while True:
a1 = getRandomNBitInteger(dbit)
b1 = getRandomNBitInteger(nbit//2-dbit)
n1 = a1*b1+1
if isPrime(n1):
break
while True:
a2 = getRandomNBitInteger(dbit)
b2 = getRandomNBitInteger(nbit//2-dbit)
n2=a2*b2+1
n3=a1*b2+1
if isPrime(n2) and isPrime(n3):
break
while True:
a3=getRandomNBitInteger(dbit)
if gmpy2.gcd(a3,a1*b1*a2*b2)==1:
v1=(n1-1)*(n2-1)
k=(a3*inverse(a3,v1)-1)//v1
v2=k*b1+1
if isPrime(v2):
return a3,n1*n2,n3*v2
def encrypt(msg, pubkey):
return pow(msg, pubkey[0], pubkey[1])
nbit = 1024
dbit = 256
e, n1, n2=keygen(nbit, dbit)
print('e =', e)
print('n1 =', n1)
print('n2 =', n2)
FLAG = int(FLAG.encode('utf-8').hex(), 16)
c1 = encrypt(FLAG, [e, n1])
c2 = encrypt(FLAG, [e, n2])
print('enc1 =', c1)
print('enc2 =', c2)
# e = 64991215158963691560526666468141959384959109359439137131747651162956455586271
# n1 = 29993503600164729015956324786706888442519396064191560750084140480290745819535179693348191507149250430395035552797283845777601934626280373409219187420866944308214314519319036917673538094015208260669572499228580056077786705598288026374871729383433345507107962917127650202187058774356364876840623349671218708163
# n2 = 22111930331381204542945530852361998548318442407872218298358617096708819116917760050316820810420025909178795848107273937553163317177369208499520284574181398183015911140668391445813446367863710044212006290553153052918732733827420444142923043854261762712224865735741111776384712426729456003107915641158324427237
# c1 = 4050453211733764124998757151959520129274498061402113370672102849996805069619121055320844250102225939073097833283374610550535896252339041756015394774844802617971866367399987374582995740057357925318488526068975412719737069982622859388378596681687999605916608432304653412791393164911051654044838692816332109954
# c2 = 300292243041384504213595552256374255656084967560586182569837688627893946619339238785749026493866380362257497763399726257131188052592740026134061382393383939963518409658835911548200196944948910370613829800837550235668282523323993253728049425141334823301549736503626230379795337868011538930813438450324726103