n1=p1q & n2=p2q
源码:
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 28
| from Crypto.Util.number import * flag = b'NSSCTF{******}'
p1 = getPrime(512) q = getPrime(512) p2 = getPrime(512)
n1 = p1*q n2 = p2*q
e = 65537
m = bytes_to_long(flag) c1 = pow(m, e, n1) c2 = pow(m, e, n2)
print(f'n1 = {n1}') print(f'n2 = {n2}') print(f'e = {e}') print(f'c1 = {c1}') print(f'c2 = {c2}') ''' n1 = 143348646254804947818644803938588739009782265465565896704788366218178523508874903492905378927641178487821742289009401873633609987818871281146199303052141439575438691652893995423962176259643151111739185844059243400387734688275416379337335777994990138009973618431459431410429980866760075387393812720247541406893 n2 = 138110854441015362783564250048191029327770295545362614687087481715680856350219966472039006526758450117969049316234863489558254565946242898336924686721846675826468588471046162610143748100096038583426519355288325214365299329095841907207926280081868726568947436076663762493891291276498567791697978693639037765169 e = 65537 c1 = 54957154834913405861345262613986460384513988240935244315981524013378872930144117440787175357956479768211180412158274730449811947349624843965933828130932856052315165316154486515277625404352272475136003785605985702495858150662789554694910771308456687676791434476722168247882078861234982509648037033827107552029 c2 = 122221335585005390437769701090707585780333874638519916373585594040154234166935881089609641995190534396533473702495240511296379249872039728112248708182969185010334637138777948970821974238214641235158623707766980447918480715835847907220219601467702961667091318910582445444058108454023108157805147341928089334736 '''
|
n1=p1∗qn2=p2∗q
∵p1,p2,q都是素数
∴n1的因数只有p1,q
∴n2的因数只有p2,q
∴n1,n2的最大公因数是q
使用gcd()
对n1,n2可以的到q,再用n1整除q得到p1, n2整除q得到p2
不过都加密的是同一个m,计算一个就行
exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| from Crypto.Util.number import * from gmpy2 import *
n1 = 143348646254804947818644803938588739009782265465565896704788366218178523508874903492905378927641178487821742289009401873633609987818871281146199303052141439575438691652893995423962176259643151111739185844059243400387734688275416379337335777994990138009973618431459431410429980866760075387393812720247541406893 n2 = 138110854441015362783564250048191029327770295545362614687087481715680856350219966472039006526758450117969049316234863489558254565946242898336924686721846675826468588471046162610143748100096038583426519355288325214365299329095841907207926280081868726568947436076663762493891291276498567791697978693639037765169 e = 65537 c1 = 54957154834913405861345262613986460384513988240935244315981524013378872930144117440787175357956479768211180412158274730449811947349624843965933828130932856052315165316154486515277625404352272475136003785605985702495858150662789554694910771308456687676791434476722168247882078861234982509648037033827107552029 c2 = 122221335585005390437769701090707585780333874638519916373585594040154234166935881089609641995190534396533473702495240511296379249872039728112248708182969185010334637138777948970821974238214641235158623707766980447918480715835847907220219601467702961667091318910582445444058108454023108157805147341928089334736
q = gcd(n1, n2) p1 = n1 // q phi = (p1-1)*(q-1) d = invert(e, phi)
m = pow(c1, d, n1) print(long_to_bytes(m))
|