T1.小明文攻击
一.题目:
from Crypto.Util.number import *
from gmpy2 import *flag = b'NSSCTF{******}'p = getPrime(5120)
q = getPrime(5120)n = p*q
e = 97
phi = (p-1)*(q-1)m = bytes_to_long(flag)
c = powmod(m, e, n)print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')'''
n = 1392208858696945158251408085300402884210409327605255122395601049457847957306648819174395014931778575812308192875319127224095733396726388842605854427013313599830150182564652493067830031524869535522568868597852507293377043240832819715539722122306829543983051745406887140154364256267942350230636870212935356815475345989038318923389132101208917912083817520799490534351545373438629367819085151041702754019127891155542476560972125790519584018715794669416759039955180436830478697704458250990786586357019211642837879273967620287257818400267757312623543898635740200839249361087580046496969637043238450499583879116276661827372750638403042213043389905183760455450595752578482968202040860053524276678108325784161897719093223308370971388068813420487879756084379519128232693549989942550047529174783976176943482484756074638704076740157397067892580297182979526978967352014250386678155843772313996171396582929433057131989693861316408604436872931427368192437680361830753162284661119995125858203931094922686321756465463988790748131178263745308042820480140189644732824717255521633534750635979508673908361269979175726073254050574688259969290376926807033728165164896588540691889207252105903436659968119091774687841336252628343233161941187968365128093917171537997137001140227677728923114895809278926486615010954871408034272872411042537353956193868948909981683850857262457369506288525323882308421700421661036191853577105238753230479541719001794464585534292774768292358961920606891227776349593589481547577148801600196035588544512224775960892265021565124673788852875005526313525709353599584812394138968970647681759439523307392275602626903789154682706839530654070108096741181206975334567778238856983205004289416400671597321919876279909765650782227834097342294844294386380646928266942749144240020420237153276705785759403019072953506982997681174635673907151856644499332322321579088035719680421458310273802481031746012298208449699089203065699598926690947025679591160106357130634946357609420125223580319677387654711233585375013067828291928349946599077331636017784447090096340360087970540477975170379810969501197027775838769222713506443846417124839450184827707739588007707714623211453528342755023849716924694572679150284882978804641986457119009272574734697043321033091757474387114449914271460113979531460465175717705674905568446670579332667139075523255580471183372714211547822093365025438653384719374474230360983878837077517864405475258349436531094649276628214288499716485354283135575921258757214288792410583835467572916298688718758374714560819702413058421373661892101033513816116981698045524150518509405086125781764762145577981637953775680403132163846782252745029783387112660812179706752454175492501665442704630131729362621965258498471247871904163412798544329515689112368523703890083138721480476796720323855371775568097188216621368341228806795058046403892301673157631331636430392885315997250027372621883549649614866115616619234953579196607399899485002042456482969222428121605212017146571466818179341621066715472184636758016242256725063854155219754299817717414423725704356940589670902509021070871847017199593680033
e = 97
c = 79418540691422578656139651796213224829563266521211325595707569487401417030874358531413674275017334363641194166574500833916574827523075402219754470871728896772312056257743844227927800121160288525434484105786180547178403828613331285574461293211150728313415280329153597549251599876668080073528625299164784405291297754331374420687599875173508778209038236713812747215157059659564867241144529476211694011692007565732793105429228730285249025627762831080251661835294067942958070742202862164086250986988784472568266652325462247009294865764533077164470382743735937483173523682749295196383707694876943634298051820105410771024861599560176707940488888601355473498847493259474613261665538825299531665650233837474894442826242097663456648233384047622152817959729025415665280499618951478005159820575701483220155180955748454167435711033379910310483689839303198822665341421591234243891877857520663120183063591818656508336831518527692847950877186870610083654117153248336928856886934232488927132245720058243202637258025864487122393335118118013444397135476780564523166548571927547341556616683070253790368891423731046742936358877118104790084195711730135202600692806999992373490439385845158780392894927697171401722699273071306493916233696254958735540772870249139252741670476667099529502282392011715616110876451102234600267482991583515122052976378641894214562203326290939184469206074418127906704847146567350085797480500249400491003993809769407575997740985283755035509654310797061339563655229926356893455738361409861102662109994984398860070584568014471082484198504331014073023689622378943694856212172718725529473812336321642429261822836311084518735006587545920946664595488768239633950124822001162595168106106356115962424210028401369438479550293237915944302351566624339603616714683958384871326105542659559877758488581425288668613061792514360263277530824203967659102107889148367539858141289229124274098921748855341045565232484417195620758495861456624842263649414501657786484816662971421962216348340311859717286253287173293151613310383128702607971580042308515018120559903265609733911340589091613087560931098833849573462572181625894166772788435459280323623477689159384354671220634694792005231505741029567734616435905915192606539962414882105254409847885996949466940350184140166614950171110955365828033747003120697209120916652982201967537088553504504252785632280900095976870510754563400828951684036526240669112248351928072177486091157562600003336544767896806392523395037345770580482363058065676920013089896399387769312374871419827762872050800055872960573607645266626972865053489632548224840580503746879607167797904430560935476705014800973841917939689270919224595772574781478285359220463175042728750523639669204218676238297875644055563803457896409252533724486937378974745777400567080239687055154021761534918106133195512030935957251049812753269173090858930245212145938555697547499155977225759702066548720079477737104010668116693232798415289735481194922014811945312893853446826780868861295203942063380964100360870361328125
'''
关键步骤:
p = getPrime(5120)
q = getPrime(5120)
N很大
二.解题wp以及代码:
1.思路: n很大,满足m**e次方<n,直接开方得到明文
看到N很大,如果满足
就表示模过程中,没有丢失信息,所以
直接解即可,不要管pq等等
2.解题代码:
from Crypto.Util.number import *
from gmpy2 import *
n = 1392208858696945158251408085300402884210409327605255122395601049457847957306648819174395014931778575812308192875319127224095733396726388842605854427013313599830150182564652493067830031524869535522568868597852507293377043240832819715539722122306829543983051745406887140154364256267942350230636870212935356815475345989038318923389132101208917912083817520799490534351545373438629367819085151041702754019127891155542476560972125790519584018715794669416759039955180436830478697704458250990786586357019211642837879273967620287257818400267757312623543898635740200839249361087580046496969637043238450499583879116276661827372750638403042213043389905183760455450595752578482968202040860053524276678108325784161897719093223308370971388068813420487879756084379519128232693549989942550047529174783976176943482484756074638704076740157397067892580297182979526978967352014250386678155843772313996171396582929433057131989693861316408604436872931427368192437680361830753162284661119995125858203931094922686321756465463988790748131178263745308042820480140189644732824717255521633534750635979508673908361269979175726073254050574688259969290376926807033728165164896588540691889207252105903436659968119091774687841336252628343233161941187968365128093917171537997137001140227677728923114895809278926486615010954871408034272872411042537353956193868948909981683850857262457369506288525323882308421700421661036191853577105238753230479541719001794464585534292774768292358961920606891227776349593589481547577148801600196035588544512224775960892265021565124673788852875005526313525709353599584812394138968970647681759439523307392275602626903789154682706839530654070108096741181206975334567778238856983205004289416400671597321919876279909765650782227834097342294844294386380646928266942749144240020420237153276705785759403019072953506982997681174635673907151856644499332322321579088035719680421458310273802481031746012298208449699089203065699598926690947025679591160106357130634946357609420125223580319677387654711233585375013067828291928349946599077331636017784447090096340360087970540477975170379810969501197027775838769222713506443846417124839450184827707739588007707714623211453528342755023849716924694572679150284882978804641986457119009272574734697043321033091757474387114449914271460113979531460465175717705674905568446670579332667139075523255580471183372714211547822093365025438653384719374474230360983878837077517864405475258349436531094649276628214288499716485354283135575921258757214288792410583835467572916298688718758374714560819702413058421373661892101033513816116981698045524150518509405086125781764762145577981637953775680403132163846782252745029783387112660812179706752454175492501665442704630131729362621965258498471247871904163412798544329515689112368523703890083138721480476796720323855371775568097188216621368341228806795058046403892301673157631331636430392885315997250027372621883549649614866115616619234953579196607399899485002042456482969222428121605212017146571466818179341621066715472184636758016242256725063854155219754299817717414423725704356940589670902509021070871847017199593680033
e = 97
c = 79418540691422578656139651796213224829563266521211325595707569487401417030874358531413674275017334363641194166574500833916574827523075402219754470871728896772312056257743844227927800121160288525434484105786180547178403828613331285574461293211150728313415280329153597549251599876668080073528625299164784405291297754331374420687599875173508778209038236713812747215157059659564867241144529476211694011692007565732793105429228730285249025627762831080251661835294067942958070742202862164086250986988784472568266652325462247009294865764533077164470382743735937483173523682749295196383707694876943634298051820105410771024861599560176707940488888601355473498847493259474613261665538825299531665650233837474894442826242097663456648233384047622152817959729025415665280499618951478005159820575701483220155180955748454167435711033379910310483689839303198822665341421591234243891877857520663120183063591818656508336831518527692847950877186870610083654117153248336928856886934232488927132245720058243202637258025864487122393335118118013444397135476780564523166548571927547341556616683070253790368891423731046742936358877118104790084195711730135202600692806999992373490439385845158780392894927697171401722699273071306493916233696254958735540772870249139252741670476667099529502282392011715616110876451102234600267482991583515122052976378641894214562203326290939184469206074418127906704847146567350085797480500249400491003993809769407575997740985283755035509654310797061339563655229926356893455738361409861102662109994984398860070584568014471082484198504331014073023689622378943694856212172718725529473812336321642429261822836311084518735006587545920946664595488768239633950124822001162595168106106356115962424210028401369438479550293237915944302351566624339603616714683958384871326105542659559877758488581425288668613061792514360263277530824203967659102107889148367539858141289229124274098921748855341045565232484417195620758495861456624842263649414501657786484816662971421962216348340311859717286253287173293151613310383128702607971580042308515018120559903265609733911340589091613087560931098833849573462572181625894166772788435459280323623477689159384354671220634694792005231505741029567734616435905915192606539962414882105254409847885996949466940350184140166614950171110955365828033747003120697209120916652982201967537088553504504252785632280900095976870510754563400828951684036526240669112248351928072177486091157562600003336544767896806392523395037345770580482363058065676920013089896399387769312374871419827762872050800055872960573607645266626972865053489632548224840580503746879607167797904430560935476705014800973841917939689270919224595772574781478285359220463175042728750523639669204218676238297875644055563803457896409252533724486937378974745777400567080239687055154021761534918106133195512030935957251049812753269173090858930245212145938555697547499155977225759702066548720079477737104010668116693232798415289735481194922014811945312893853446826780868861295203942063380964100360870361328125m = iroot(c, e)print(long_to_bytes(m[0]))#m[0]
代码解读
我们使用gmpy2
中的iroot
开任意次方,用法为iroot(10, 3)
代表对10开3次方,返回结果为(mpz(2), False)
,其中第一项为返回的结果,mpz
为gmpy2
包中对整数的封装类,看作一个整数即可,第二项代表这个数是否为完全开放的结果,例如103310并不是一个整数,但gmpy2
只会返回取整后的整数值,故通过第二项我们能够知道是否为完全k次方数。
例如iroot(9, 2)
返回(mpz(3), True)
代表9是一个完全平方数。
T2.低密度指数加密
一.题目:
from Crypto.Util.number import *
from gmpy2 import *flag = b'NSSCTF{******}'p = getPrime(512)
q = getPrime(512)n = p*q
e = 3
phi = (p-1)*(q-1)
m = bytes_to_long(flag)c = powmod(m, e, n)print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')'''
n = 111573371787314339229652810703380127177507745009618224416171957526984270337589283887959174610818933914845556276472159360153787395638087723501889651641965684241070152541291185349571453536221312112508437223801640552330390095266644485311958102687735113533739324296417077804219395793942670324182191309872918900717
e = 3
c = 90782646242308381145716338972639920044710403094882163620436540965475107006005657722222634294458956650085252212452241377251397323707019480880284004845674260662647720809672266571040936376737882878688872281858048646517100139303896804340224961592424635124272549514473232731744884837572128596217771005209683966262
'''
关键步骤:
p = getPrime(512)
q = getPrime(512)n = p*q
e = 3
二.解题wp以及代码:
1.思路: 依然n很大,但是也模出去了一点数据,但是也可以爆破出来,继续开方解密(同T1一样)
小明文进阶的算法,直接开方解没有解出来,但是N也爆破不了,可能是低密度指数解密攻击
用脚本爆破解密k,再用小明文攻击解密flag
(这里爆破范围10w,100w,1000w对于计算机都算小的)
风佬解释
2.解题代码:
from Crypto.Util.number import *
from gmpy2 import *
n = 111573371787314339229652810703380127177507745009618224416171957526984270337589283887959174610818933914845556276472159360153787395638087723501889651641965684241070152541291185349571453536221312112508437223801640552330390095266644485311958102687735113533739324296417077804219395793942670324182191309872918900717
e = 3
c = 90782646242308381145716338972639920044710403094882163620436540965475107006005657722222634294458956650085252212452241377251397323707019480880284004845674260662647720809672266571040936376737882878688872281858048646517100139303896804340224961592424635124272549514473232731744884837572128596217771005209683966262for k in range(100000):cc = c + k*nres = iroot(cc, e)if res[1]:m = res[0]break
print(res[0]) #m
print(res[1]) #开方后的布尔值
print(long_to_bytes(m))
print('k:',k) # 11
代码解释:
res = iroot(cc, e)
接下来,调用一个名为iroot的函数(这个函数可能用于计算整数根),并将cc和e作为参数传递。这个函数返回一个包含两个元素的元组res。根据函数名和常见用法,我们可以猜测iroot函数可能试图找到cc的e次方根,并返回一个元组,其中第一个元素是根的值,第二个元素可能是一个布尔值,指示是否成功找到根。if res[1]:
这行代码检查res元组的第二个元素(即res[1])是否为真。根据上面的假设,这个值可能是一个布尔值,指示iroot函数是否成功找到根。m = res[0]
如果res[1]为真(即iroot函数成功找到了根),则将res元组的第一个元素(即根的值)赋值给变量m。
T3.Rabin算法攻击
来到这里开始上强度了,今天就学习5种攻击方式吧,要不然难以消化,后面去其他方向玩玩,现在还差3题
一.题目:
from Crypto.Util.number import *
from gmpy2 import *flag = b'NSSCTF{******}'p = getPrime(256)
q = getPrime(256)assert p%4 == 3 and q%4 == 3n = p*q
e = 2
m = bytes_to_long(flag)c = powmod(m, e, n)print(f'p = {p}')
print(f'q = {q}')
print(f'e = {e}')
print(f'c = {c}')'''
p = 67711062621608175960173275013534737889372437946924512522469843485353704013203
q = 91200252033239924238625443698357031288749612243099728355449192607988117291739
e = 2
c = 5251890478898826530186837207902117236305266861227697352434308106457554098811792713226801824100629792962861125855696719512180887415808454466978721678349614
'''
关键步骤:
assert p%4 == 3 and q%4 == 3
e=2
这两个步骤就是Rabin算法的关键节点
二.解题wp以及代码:
1.思路: Rabin算法,中国剩余定理来接解题
需要大家了解二次剩余(平方剩余),中国剩余定理,我这里写上公式,需要你自己去深入了解一下,也不是很难(下面是一个Rabin算法视频地址,rabin算法讲的很好)
现代密码学|Rabin密码体制及其数学基础_哔哩哔哩_bilibili
二次剩余
中国剩余定理(CRT)
主要是求X
m1,m2,m3....mk是知道的
a1,a2,a3....ak是也知道的
M*-1是m的逆元
(逆元不懂的话就得自己去学了,这是基础)
代入公式就可以解X了
视频解读
平方剩余
条件:a与n互素
RSA中的Rabin算法
e=2且p和q在模4的情况下同余 满足Rabin算法
1.密钥的产生满足Rabin算法
2.加密
3.解密:
当n=pq时,可以拆成两个两个式子
同余可以转换
转换到可以开方的就开方
x=+3mod7或者-3mod7
利用平方剩余得到4个同余方程
每一个方程组利用中国剩余定理解得一个x,一共有4个x,总有一个是对的
3.解题代码:
from Crypto.Util.number import *
from gmpy2 import *p = 67711062621608175960173275013534737889372437946924512522469843485353704013203
q = 91200252033239924238625443698357031288749612243099728355449192607988117291739
e = 2
c = 5251890478898826530186837207902117236305266861227697352434308106457554098811792713226801824100629792962861125855696719512180887415808454466978721678349614def rabin_attack(c, n, p, q):c1 = powmod(c, (p+1)//4, p)c2 = powmod(c, (q+1)//4, q)cp1 = p - c1cp2 = q - c2t1 = invert(p, q)t2 = invert(q, p)m1 = (q*c1*c2 + p*c2*t1) % nm2 = (q*c1*t2 + p*cp2*t1) % nm3 = (q*cp1*t2 + p*c2*t1) % nm4 = (q*cp1*t2 + p*cp2*t1) % nreturn m1, m2, m3, m4ms = rabin_attack(c, p*q, p, q)for m in ms:print(long_to_bytes(m))
"""
b'\x1b*\x05\xc8\tugt\xaf#S\xa7\xf5\x82\x82H\xa8t\x01\x159\x11\xa8{1\x93\x87Y\xa5\x17\x8b*?\nk\x03\xfb\x0cr\xcb\x90\xbe\x8d9\xaf\xd8M\x1d.\xfa B\xf9m\xda\t}\xcfC\x9b>\x7f\xbb\xc0'
b"u\xe8\x12C-\xcf'\xc2\x19\xd6\x1f\xf50\x96=\x0f_W*S6\xf7\x14\xcf \xcf\xfb\xb8,\x14p0\xe7\xfe\xbf\x96\x16p\x8fsW\x99\x8d|\x90\x1b\xa1\x95\n\xc9\x95\xfc\xcc\x08\x9b\xea>\x84:M\x93\xf5\xf1D"
b'NSSCTF{rabin!rabin!rabin!not_just_rsa!}'
b'%~4\x16\xc7\xa9G\xa2\xb6\x04@\xaa\x16\x99\xc8\xd9\xa6R\xe9\x8f\xcf\x92\xa8%:\x1e)b\x8bE\xd2\x01\x16\xa9sG6\xdf\xed=\xb9\xa2\xd8\xf7l\xae\xed{.\xc3{$\x85Q\x87\tm\xe08\xe3\x10=\x06\xb3'"""
代码解读
def rabin_attack(c, n, p, q):c1 = powmod(c, (p+1)//4, p) #pow作用一样c2 = powmod(c, (q+1)//4, q)cp1 = p - c1cp2 = q - c2t1 = invert(p, q)t2 = invert(q, p)m1 = (q*c1*c2 + p*c2*t1) % nm2 = (q*c1*t2 + p*cp2*t1) % nm3 = (q*cp1*t2 + p*c2*t1) % nm4 = (q*cp1*t2 + p*cp2*t1) % nreturn m1, m2, m3, m4
中国剩余定理
图解
这里由下面的费马小定理得
费马小定理
学习一个攻击就是要学习算法以及代码实现
T8.共模攻击
一.题目:
from Crypto.Util.number import *flag = b'NSSCTF{******}'p = getPrime(512)
q = getPrime(512)n = p*q
e1 = getPrime(16)
e2 = getPrime(16)m = bytes_to_long(flag)c1 = pow(m, e1, n)
c2 = pow(m, e2, n)print(f'n = {n}')
print(f'e1 = {e1}')
print(f'e2 = {e2}')
print(f'c1 = {c1}')
print(f'c2 = {c2}')'''
n = 120294155186626082670474649118722298040433501930335450479777638508444129059776534554344361441717048531505985491664356283524886091709370969857047470362547600390987665105196367975719516115980157839088766927450099353377496192206005171597109864609567336679138620134544004766539483664270351472198486955623315909571
e1 = 38317
e2 = 63409
c1 = 42703138696187395030337205860503270214353151588149506110731264952595193757235229215067638858431493587093612397165407221394174690263691095324298012134779703041752810028935711214038835584823385108771901216441784673199846041109074467177891680923593206326788523158180637665813642688824593788192044139055552031622
c2 = 50460092786111470408945316270086812807230253234809303694007902628924057713984397041141665125615735752600114964852157684904429928771531639899496987905067366415806771003121954852465731110629459725994454904159277228514337278105207721011579794604761255522391446534458815389983562890631994726687526070228315925638
'''
关键步骤: 两个公钥e,两个密文,并且共模
c1 = pow(m, e1, n)
c2 = pow(m, e2, n)
二.解题代码
1.解题思路:共模攻击,利用翡镯定理找出s1,s2
翡镯定理+扩展欧几里得
2.共模攻击条件: 两个公钥e互素,共模
3.解题代码
from Crypto.Util.number import *
from gmpy2 import *n = 120294155186626082670474649118722298040433501930335450479777638508444129059776534554344361441717048531505985491664356283524886091709370969857047470362547600390987665105196367975719516115980157839088766927450099353377496192206005171597109864609567336679138620134544004766539483664270351472198486955623315909571
e1 = 38317
e2 = 63409
c1 = 42703138696187395030337205860503270214353151588149506110731264952595193757235229215067638858431493587093612397165407221394174690263691095324298012134779703041752810028935711214038835584823385108771901216441784673199846041109074467177891680923593206326788523158180637665813642688824593788192044139055552031622
c2 = 50460092786111470408945316270086812807230253234809303694007902628924057713984397041141665125615735752600114964852157684904429928771531639899496987905067366415806771003121954852465731110629459725994454904159277228514337278105207721011579794604761255522391446534458815389983562890631994726687526070228315925638_, s1, s2 = gcdext(e1, e2)m = powmod(c1, s1, n)*powmod(c2, s2, n) % n
print(long_to_bytes(m))
代码解读
代表左边和右边在模n的情况下相等,
因为m<n,所以左边模n等于m
代码解释:
(1)_, s1, s2 = gcdext(e1, e2)解释
_, s1, s2 = gcdext(e1, e2)
在Python中,下划线 _ 通常用作一个“丢弃”的变量名,用于在解构赋值时表示我们不需要这个值。当你从函数或方法中解构得到一个返回值,但你对其中一个或多个值不感兴趣时,可以使用下划线 _。
(2)powmod(c, s, n)与pow(c, s, n)区别
T9.dp&dq泄露攻击
一.题目:
from Crypto.Util.number import *flag = b'NSSCTF{******}'p = getPrime(512)
q = getPrime(512)n = p*q
e = getPrime(128)
d = inverse(e, (p-1)*(q-1))dp = d % (p-1)
dq = d % (q-1)m = bytes_to_long(flag)c = pow(m, e, n)print(f'p = {p}')
print(f'q = {q}')
print(f'c = {c}')
print(f'dp = {dp}')
print(f'dq = {dq}')'''
p = 13070310882303377463944295715444821218324151935347454554272870042925400761984585838979931730897626589859098834802923539617244712852188293321626061072925723
q = 10411551818233737389114520103233235272671271111546186997024935593000298916988792710521511848414549553426943998093077337023514210631662189798921671306236009
c = 62492280219693914005334023569480350249964827909276875032578276064973191654731196407886841145547165693859745313398152742796887457192397932684370631253099255490064673499746314452067588181106154875239985334051909867580794242253066085627399488604907196244465911471895118443199543361883148941963668551684228132814
dp = 11568639544706374912496682299967972464196129347160700749666263275305083977187758414725188926013198988871173614336707804756059951725809300386252339177953017
dq = 3455040841431633020487528316853620383411361966784138992524801280785753201070735373348570840039176552952269927122259706586236960440300255065994052962742469
'''
关键步骤:没有给公钥e
dp = d % (p-1)
dq = d % (q-1)
二.思路以及wp
1.思路:dp&dq转换
这里注意,因为上面的cd=m_1+kp, <=>cd+kp=m
2.解题代码:
from Crypto.Util.number import *
from gmpy2 import *p = 13070310882303377463944295715444821218324151935347454554272870042925400761984585838979931730897626589859098834802923539617244712852188293321626061072925723
q = 10411551818233737389114520103233235272671271111546186997024935593000298916988792710521511848414549553426943998093077337023514210631662189798921671306236009
c = 62492280219693914005334023569480350249964827909276875032578276064973191654731196407886841145547165693859745313398152742796887457192397932684370631253099255490064673499746314452067588181106154875239985334051909867580794242253066085627399488604907196244465911471895118443199543361883148941963668551684228132814
dp = 11568639544706374912496682299967972464196129347160700749666263275305083977187758414725188926013198988871173614336707804756059951725809300386252339177953017
dq = 3455040841431633020487528316853620383411361966784138992524801280785753201070735373348570840039176552952269927122259706586236960440300255065994052962742469invp = invert(p, q)
m1 = powmod(c, dp, p)
m2 = powmod(c, dq, q)
m = (((m2 - m1)*invp) % q)*p + m1
print(long_to_bytes(m))
结语:
我的排版是按照NSSCTF工坊来的,跳了一些题,我没有完全理解,所以写不出自己的总结,就先跳,后面先过一遍再来细挖,今天5个题型,OK,下课。