[NCTF2019]childRSA

知识点:分解n

感觉用py2好点! py3老出问题!

这个不用yayu分解! 我就真人傻了!🙄

不过能分解! 真的神奇!

ok

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/5/31 16:36
# @Author : upload
# @File : [NCTF2019]childRSA.py
# @Software: PyCharm
import binascii

import gmpy2
import libnum
p = 178449493212694205742332078583256205058672290603652616240227340638730811945224947826121772642204629335108873832781921390308501763661154638696935732709724016546955977529088135995838497476350749621442719690722226913635772410880516639651363626821442456779009699333452616953193799328647446968707045304702547915799734431818800374360377292309248361548868909066895474518333089446581763425755389837072166970684877011663234978631869703859541876049132713490090720408351108387971577438951727337962368478059295446047962510687695047494480605473377173021467764495541590394732685140829152761532035790187269724703444386838656193674253139
q = '''
184084121540115307597161367011014142898823526027674354555037785878481711602257307508985022577801782788769786800
015984410443717799994642236194840684557538917849420967360121509675348296203886340264385224150964642958965438801864306187
503790100281099130863977710204660546799128755418521327290719635075221585824217487386227004673527292281536221958961760681
032293340099395863194031788435142296085219594866635192464353365034089592414809332183882423461536123972873871477755949082
223830049594561329457349537703926325152949582123419049073013144325689632055433283354999265193117288252918515308767016885
678802217366700376654365502867'''
q = gmpy2.mpz(q)
n = 32849718197337581823002243717057659218502519004386996660885100592872201948834155543125924395614928962750579667346279456710633774501407292473006312537723894221717638059058796679686953564471994009285384798450493756900459225040360430847240975678450171551048783818642467506711424027848778367427338647282428667393241157151675410661015044633282064056800913282016363415202171926089293431012379261585078566301060173689328363696699811123592090204578098276704877408688525618732848817623879899628629300385790344366046641825507767709276622692835393219811283244303899850483748651722336996164724553364097066493953127153066970594638491950199605713033004684970381605908909693802373826516622872100822213645899846325022476318425889580091613323747640467299866189070780620292627043349618839126919699862580579994887507733838561768581933029077488033326056066378869170169389819542928899483936705521710423905128732013121538495096959944889076705471928490092476616709838980562233255542325528398956185421193665359897664110835645928646616337700617883946369110702443135980068553511927115723157704586595844927607636003501038871748639417378062348085980873502535098755568810971926925447913858894180171498580131088992227637341857123607600275137768132347158657063692388249513

e = 0x10001
c = 26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108
fn = (q-1)*(p-1)
d = gmpy2.invert(e, fn)

m = pow(c,d,n)
print(m)
print(binascii.unhexlify(hex(m)[2:]))
print(libnum.n2s(m).replace('NCTF',"flag"))

[HDCTF2019]bbbbbbrsa

知识点:RSA

写脚本本来想自己找呢! 但是不行!这py byte 和 字符 16进制 转的头晕了!还是写文件好!而且py3不行!只能py2!

# -*-coding:utf-8-*-
# coding=utf-8

import base64
import binascii
import random

import gmpy2
import libnum
from gmpy2 import invert, gcd, iroot
from Crypto.Util.number import *
from binascii import a2b_hex, b2a_hex

s = '==gMzYDNzIjMxUTNyIzNzIjMyYTM4MDM0gTMwEjNzgTM2UTN4cjNwIjN2QzM5ADMwIDNyMTO4UzM2cTM5kDN2MTOyUTO5YDM0czM3MjM'
s = s[::-1]
c = base64.b64decode(s)
cc = 2373740699529364991763589324200093466206785561836101840381622237225512234632
p = gmpy2.mpz(177077389675257695042507998165006460849)
n = gmpy2.mpz(37421829509887796274897162249367329400988647145613325367337968063341372726061)

q = gmpy2.mpz(n // p)

fn = gmpy2.mpz((q - 1) * (p - 1))
flag = open("flag.txt",'w')
for e in range(50000,70001):
try:
d = invert(e, fn)
# if libnum.n2s(pow(cc, d, n)).find('flag{'):
# print(libnum.n2s(pow(cc, d, n)))
flag.write(libnum.n2s(pow(cc, d, n)))
print(1)
except:
pass

[BJDCTF2020]RSA

知识点: n因式分解 爆破e

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# @Time : 2021/5/31 17:49
# @Author : upload
# @File : [BJDCTF2020]RSA.py
# @Software: PyCharm
import binascii

import gmpy2
import libnum

n1 = 13508774104460209743306714034546704137247627344981133461801953479736017021401725818808462898375994767375627749494839671944543822403059978073813122441407612530658168942987820256786583006947001711749230193542370570950705530167921702835627122401475251039000775017381633900222474727396823708695063136246115652622259769634591309421761269548260984426148824641285010730983215377509255011298737827621611158032976420011662547854515610597955628898073569684158225678333474543920326532893446849808112837476684390030976472053905069855522297850688026960701186543428139843783907624317274796926248829543413464754127208843070331063037
n2 = 12806210903061368369054309575159360374022344774547459345216907128193957592938071815865954073287532545947370671838372144806539753829484356064919357285623305209600680570975224639214396805124350862772159272362778768036844634760917612708721787320159318432456050806227784435091161119982613987303255995543165395426658059462110056431392517548717447898084915167661172362984251201688639469652283452307712821398857016487590794996544468826705600332208535201443322267298747117528882985955375246424812616478327182399461709978893464093245135530135430007842223389360212803439850867615121148050034887767584693608776323252233254261047
p = gmpy2.gcd(n1, n2)
print 'gcd(n1, n2):\n', p
q1 = n1 / p
q2 = n2 / p
print 'q1 is:\n', q1
print 'q2 is:\n', q2

fn = (p-1)*(q1-1)
c = 12641635617803746150332232646354596292707861480200207537199141183624438303757120570096741248020236666965755798009656547738616399025300123043766255518596149348930444599820675230046423373053051631932557230849083426859490183732303751744004874183062594856870318614289991675980063548316499486908923209627563871554875612702079100567018698992935818206109087568166097392314105717555482926141030505639571708876213167112187962584484065321545727594135175369233925922507794999607323536976824183162923385005669930403448853465141405846835919842908469787547341752365471892495204307644586161393228776042015534147913888338316244169120
# for e in range(100000):
# if pow(294,e,n1) ==381631268825806469518166370387352035475775677163615730759454343913563615970881967332407709901235637718936184198930226303761876517101208677107311006065728014220477966000620964056616058676999878976943319063836649085085377577273214792371548775204594097887078898598463892440141577974544939268247818937936607013100808169758675042264568547764031628431414727922168580998494695800403043312406643527637667466318473669542326169218665366423043579003388486634167642663495896607282155808331902351188500197960905672207046579647052764579411814305689137519860880916467272056778641442758940135016400808740387144508156358067955215018:
# print(e)
e = 52361
d = gmpy2.invert(e, fn)
m = pow(c,d,n1)
print(binascii.unhexlify(hex(m)[2:]))
print(libnum.n2s(m).replace('BJD','flag'))

[BJDCTF2020]rsa_output

知识点:共模攻击 发现n一样

# -*-coding:utf-8-*-
# coding=utf-8
#!/bin/python2
# -*- coding: cp936 -*- import time
import time

import gmpy2
n = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111
e = [2767, 3659]
c = [20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599, 11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227]
print '[+]Detecting m...'
time.clock()
c1 = c[0]
c2 = c[1]
e1 = e[0]
e2 = e[1]
s = gmpy2.gcdext(e1, e2)
s1 = s[1]
s2 = s[2]
# 求模反元素
if s1 < 0:
s1 = -s1
c1 = gmpy2.invert(c1, n)
elif s2 < 0:
s2 = -s2
c2 = gmpy2.invert(c2, n)
m = pow(c1, s1, n) * pow(c2, s2, n) % n
print ' [-]m is:' + '{:x}'.format(int(m)).decode('hex')
print '\n[!]Timer:', round(time.clock(),2), 's'
print '[!]All Done!'

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2021/5/31 18:36
# @Author : upload
# @File : [BJDCTF2020]rsa_output.py
# @Software: PyCharm
import gmpy2
import binascii
import rsa
import math
def exgcd(m, n, x, y):
if n == 0:
x = 1
y = 0
return (m, x, y)
a1 = b = 1
a = b1 = 0
c = m
d = n
q = int(c / d)
r = c % d
while r:
c = d
d = r
t = a1
a1 = a
a = t - q * a
t = b1
b1 = b
b = t - q * b
q = int(c / d)
r = c % d
x = a
y = b
return (d, x, y)#扩展欧几里得算法
c1=20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599
c2=11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227
e1=2767
e2=3659
n=21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111

ans=exgcd(e1,e2,0,0)
print(ans)
s1=ans[1]
s2=ans[2]
m=(gmpy2.powmod(c1,s1,n)*gmpy2.powmod(c2,s2,n))%n#powmod()函数真香,分数取模也可直接算,一开始不知道还去找了很多的算法知识
print(binascii.unhexlify(hex(m)[2:]))



[MRCTF2020]keyboard

知识点:9手机键盘

这题有bug!最后一个3就出现一次 应该是d才对呀!

# -*-coding:utf-8-*-
# coding=utf-8
#!/bin/python3
# -*- coding: cp936 -*- import time

# -*-coding:utf-8-*-
# coding=utf-8

# a = []
# st = 'ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee'
# st = st.replace(' ',',')
# all = {'none1':'','none2':'','w':'abc','e':'def','r':'ghi','t':'jkl','y':'mno','u':'pors','i':'tuv','o':'wxyz'}
# st = st.split(',')
# print(st)
# flag = ''
# for i in st:
# print(i[0])
# print(len(i))
# print(all[i[0]][len(i)-1])
# flag += all[i[0]][len(i)-1]
# print('flag{'+flag+'}')

key = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}

all= ['6','666','22','444','555','33','7','44','666','66','33']

flag = ''
for i in all:
print(i[0])
print(len(i))

print(key[i[0]][len(i)-1])
flag +=key[i[0]][len(i)-1]

print('flag{'+flag+'}')
#flag{mobilephone}

SameMod

知识点:rsa 共模攻击

有的时候m是ascii不能直接hex转字符

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2021/5/31 18:36
# @Author : upload
# @File : [BJDCTF2020]rsa_output.py
# @Software: PyCharm
import gmpy2
import binascii

import libnum
# import rsa
import math
def exgcd(m, n, x, y):
if n == 0:
x = 1
y = 0
return (m, x, y)
a1 = b = 1
a = b1 = 0
c = m
d = n
q = int(c / d)
r = c % d
while r:
c = d
d = r
t = a1
a1 = a
a = t - q * a
t = b1
b1 = b
b = t - q * b
q = int(c / d)
r = c % d
x = a
y = b
return (d, x, y)#扩展欧几里得算法
c1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349
c2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535
e1=773
e2=839
n=6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249

ans=exgcd(e1,e2,0,0)
print(ans)
s1=ans[1]
s2=ans[2]
m=(gmpy2.powmod(c1,s1,n)*gmpy2.powmod(c2,s2,n))%n#powmod()函数真香,分数取模也可直接算,一开始不知道还去找了很多的算法知识
print(m)

flag = ''
result = str(m)
i=0
while i < len(result):
print('i:',i)
if(result[i]=='1'):
flag +=chr(int(result[i:i+3]))
i+=3
else:
flag+=chr(int(result[i:i+2]))
i+=2

print(flag)
# print(binascii.unhexlify(hex(m)[2:]))
# print(libnum.n2s(m))


[GWCTF 2019]BabyRSA

知识点:直接分解N 再看看加密脚本解密!

只有py2才行!

# -*-coding:utf-8-*-
# coding=utf-8
#!/bin/python2
# -*- coding: cp936 -*- import time
import binascii
import hashlib

import libnum
from Crypto.Util.number import *
source_text = 'flag{adadada}'
flag = 'adadadadadadadadwdsssdwdadaadadad'
f = bytes_to_long("string")
# print(binascii.unhexlify(hex(f)[2:]))
print(libnum.n2s(f))

[WUSTCTF2020]babyrsa

知识点:简单RSA

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/5/31 20:16
# @Author : upload
# @File : [GWCTF 2019]BabyRSA.py
# @Software: PyCharm
import binascii
from Crypto.Util.number import *
import gmpy2
import libnum
from sympy import solve, Eq
from sympy.abc import x,y,z
p = 797862863902421984951231350430312260517773269684958456342860983236184129602390919026048496119757187702076499551310794177917920137646835888862706126924088411570997141257159563952725882214181185531209186972351469946269508511312863779123205322378452194261217016552527754513215520329499967108196968833163329724620251096080377747699
q = 797862863902421984951231350430312260517773269684958456342860983236184129602390919026048496119757187702076499551310794177917920137646835888862706126924088411570997141257159563952725882214181185531209186972351469946269508511312863779123205322378452194261217016552527754513215520329499967108196968833163329724620251096080377748737
n=636585149594574746909030160182690866222909256464847291783000651837227921337237899651287943597773270944384034858925295744880727101606841413640006527614873110651410155893776548737823152943797884729130149758279127430044739254000426610922834573094957082589539445610828279428814524313491262061930512829074466232633130599104490893572093943832740301809630847541592548921200288222432789208650949937638303429456468889100192613859073752923812454212239908948930178355331390933536771065791817643978763045030833712326162883810638120029378337092938662174119747687899484603628344079493556601422498405360731958162719296160584042671057160241284852522913676264596201906163
m1=90009974341452243216986938028371257528604943208941176518717463554774967878152694586469377765296113165659498726012712288670458884373971419842750929287658640266219686646956929872115782173093979742958745121671928568709468526098715927189829600497283118051641107305128852697032053368115181216069626606165503465125725204875578701237789292966211824002761481815276666236869005129138862782476859103086726091860497614883282949955023222414333243193268564781621699870412557822404381213804026685831221430728290755597819259339616650158674713248841654338515199405532003173732520457813901170264713085107077001478083341339002069870585378257051150217511755761491021553239
m2=487443985757405173426628188375657117604235507936967522993257972108872283698305238454465723214226871414276788912058186197039821242912736742824080627680971802511206914394672159240206910735850651999316100014691067295708138639363203596244693995562780286637116394738250774129759021080197323724805414668042318806010652814405078769738548913675466181551005527065309515364950610137206393257148357659666687091662749848560225453826362271704292692847596339533229088038820532086109421158575841077601268713175097874083536249006018948789413238783922845633494023608865256071962856581229890043896939025613600564283391329331452199062858930374565991634191495137939574539546
e = 0x10001
fn = (p-1)*(q-1)
d = gmpy2.invert(e, fn)
c1 =pow(m1,d,n)
c2 = pow(m2,d,n)
#
# lis = solve([Eq(x+y, c1), Eq(pow(x,3) + pow(y,3), c2)], [x, y])
# F1 = lis[0][0]
# F2 = lis[0][1]
# print(F1)
F1=1141553212031156130619789508463772513350070909
F2=1590956290598033029862556611630426044507841845
print(type(F1))
a = str(F1)+str(F2)
print(a)
flag = ''
result = str(a)

print(binascii.unhexlify(hex(F1)[2:]))
a =libnum.n2s(F2)+libnum.n2s(F1)
print(str(a).replace('GWHT','flag'))

print(long_to_bytes(F1)+long_to_bytes(F2))
# -*-coding:utf-8-*-
# coding=utf-8
#!/bin/python3
# -*- coding: cp936 -*- import time
import binascii
import hashlib

import gmpy2
from Crypto.Util.number import long_to_bytes

c = 28767758880940662779934612526152562406674613203406706867456395986985664083182
n = 73069886771625642807435783661014062604264768481735145873508846925735521695159
e = 65537

q =189239861511125143212536989589123569301
p =386123125371923651191219869811293586459
fn = (p-1)*(q-1)
d = gmpy2.invert(e, fn)
m = pow(c,d,n)
print(long_to_bytes(m).replace('wctf2020','flag'))