本文主要是介绍Bugku Crypto 部分题目简单题解(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
where is flag 5
下载打开附件
Gx8EAA8SCBIfHQARCxMUHwsAHRwRHh8BEQwaFBQfGwMYCBYRHx4SBRQdGR8HAQ0QFQ==
看着像base64解码
尝试后发现,使用在线工具无法解密
编写脚本
import base64enc = 'Gx8EAA8SCBIfHQARCxMUHwsAHRwRHh8BEQwaFBQfGwMYCBYRHx4SBRQdGR8HAQ0QFQ=='
text = base64.b64decode(enc)
bin_data = ["0"*(5-len(i))+i if len(i)!=5 else i for i in [bin(j).replace('0b','') for j in text]]
flag = ''
data1 = ''
for j in range(5):for i in bin_data:data1 +=i[j]
for k in range(0,len(data1),7):flag +=chr(int(str(data1[k:k+7]),2))
print(flag)
并运行
得到flag
Bugku CTF---where is flag 5_bugkuwhere is flag 5-CSDN博客
或者
from urllib import parse
s = '\x1b\x1f\x04\x00\x0f\x12\x08\x12\x1f\x1d\x00\x11\x0b\x13\x14\x1f\x0b\x00\x1d\x1c\x11\x1e\x1f\x01\x11\x0c\x1a\x14\x14\x1f\x1b\x03\x18\x08\x16\x11\x1f\x1e\x12\x05\x14\x1d\x19\x1f\x07\x01\r\x10\x15'
s = s.encode("unicode_escape")
s1 = s.decode('utf-8').replace('\\x', '').replace("\\r","0d")
s2=""
s3=""
for i in range(len(s1)):if i%2==0:s2=s2+s1[i]else:s3=s3+s1[i]
j=0
zh=0
s4=""
for i in s2:j+=1zh=zh*2+int(i)if j ==7:j=0s4=s4+chr(zh)zh=0
s5=[bin(int(i,16)).replace("0b","") for i in s3]
s6=[s2[i]+"0"*(5-len(s2[i]+s5[i]))+s5[i] if (len(s2[i]+s5[i])!=5) else s2[i]+s5[i] for i in range(len(s2))]
for i in range(5):str="".join([ii[i] for ii in s6])print(*[chr(int(str[i:i+7],2)) for i in range(0,len(str),7)],sep="",end="")
得到flag
No Ciphertext RSA
题目描述:The ciphertext is unknown! 密文未知
下载解压打开附件
NO Ciphertext RSA -BugkuCTF-CSDN博客
脚本如下
import gmpy2
from Crypto.Util.number import long_to_bytes
e = 65537
n = 20446305236294581881140725938833605520023786992590821920806811572505477606387830733060901955371457846738863889279107367753914707053108524516947943610226964107558978693717655472431318403586269727573489946433389159145602800207787382180423611018458189828931572992863289292613405218278949739073786959411566919119158325510346523951336418479951932209799501108477995314359188860274532542630968951457343647522078553891223764285682602714616115281040492374167771746275218863543545907073818468841626731849010162645256595641473022327747346052186526727216525426337190917106751151745388854749923598231196090790074682287345100965373
dp = 158325084409606165134868956023907667507671677832027168046364315703295407017343206432691817272550256085313093440797443736742051552429653661451417133052016647805226890534559578502154540190596419643135611407218228612201386225040438407799879719366484669372051153511312310009858718254183049095347658106745575535469
for i in range(1,65538):if (dp*e-1)%i == 0:if n%(((dp*e-1)//i)+1)==0:p=((dp*e-1)//i)+1q=n//(((dp*e-1)//i)+1)phi = (p-1)*(q-1)d = gmpy2.invert(e,phi)%phi
leak_c1 = 116908580792713727509554342060190793142033425411766631165842865699167747112494944492849392371565838125428644563687571660329763478509815200537676368326781342382868082294015200439334832938068779547847851748337854603115134732593759473453640093195977206450633212921689957303431235603192670553553803757864481012599
leak_c2 = 18319344794671185787719339480953236221170603508712466350928025351527616335735433941953520711516118072282425397883638101260674452825151245435529613074796106769481242318321469286177813223159476396555044378245229663195991557031227024085316255781963813911437991309663376270820486723382786632243229800891705679245
def CRT(aList, mList):M = 1for i in mList:M = M * ix = 0for i in range(len(mList)):Mi = M // mList[i]Mi_inverse = gmpy2.invert(Mi, mList[i])x += aList[i] * Mi * Mi_inversex = x % Mreturn x
if __name__ == "__main__":cList = [leak_c1,leak_c2]nList = [p,q]c = CRT(cList, nList)m=pow(c,d,n)print(long_to_bytes(m))
得到flag
简单加密
题目描述:
e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA
看起来很像base64,但是有一些字符不在base64加密字符的范围,由最后两个AA,猜测是==偏移ascii码之后的结果。
编写脚本来实现
import base64
c = "e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA"
c1=""
for i in c:c1+=chr(ord(i)-4)
flag = base64.b64decode(c1)
print(flag)
运行
得到flag
散乱的密文
题目描述:
lf5{ag024c483549d7fd@@1} 一张纸条上凌乱的写着2 1 6 5 3 4
提示分析可知,加密方法为六个字符一组,做置换。
六个一组按照提示的置换顺序还原回去
编写脚本
c = "lf5{ag024c483549d7fd@@1} "
l=["","","","","",""]
for i in range(len(c)):l[i%6]+=c[i]
flag=""
for i in range(len(c)//6):flag+=l[1][i]+l[0][i]+l[4][i]+l[5][i]+l[3][i]+l[2][i]
print(flag)
并运行
得到flag
Double
下载解压附件后,使用记事本打开
得到如图内容
将n丢到在线分解网站,发现可以分解得到
factordb.com
将得到的p减去1之后一一相乘,得到phi_n,求出phi_n且已知e又可以解出d,最后直接pow即可得到明文
n = 2627832721798532654645633759787364870195582649392807630554510880534973280751482201937816738488273589173932960856611147584617677312265144131447658399933331448791094639659769069406481681017795446858858181106274806005669388289349727511470680972
c = 96830301447792999743877932210925094490214669785432172099311147672020980136112114653571739648595225131425493319224428213036136642899189859618195566355934768513439007527385261977662612094503054618556883356183687422846428828606638722387070581
e = int('0x10001',16)
p_list = [2,2,3,3,13,101,443,1087,15527,47363,111309491243,5738160242986813,118881536167887307517887651928306109231371669715927208908931577713837,2067526976195544603847619621425435706797374170280528431947550231604621041865531599319428120598265860512130517815755608596553793]
phi_n = 1
for p in p_list:phi_n *= (p-1)d = gmpy2.invert(e,phi_n)
m = pow(c,d,n)
flag = long_to_bytes(m)
print(flag)
但是运行后报错了
尝试另外一个大佬写的脚本
from Crypto.Util.number import *
import gmpy2
p=2
q=3
r3=13
r4=101
r5=443
r6=1087
r7=15527
r8=47363
r9=111309491243
r10=5738160242986813
r11=118881536167887307517887651928306109231371669715927208908931577713837
r12=2067526976195544603847619621425435706797374170280528431947550231604621041865531599319428120598265860512130517815755608596553793
n=2627832721798532654645633759787364870195582649392807630554510880534973280751482201937816738488273589173932960856611147584617677312265144131447658399933331448791094639659769069406481681017795446858858181106274806005669388289349727511470680972
e=65537
d=gmpy2.invert(e,(p-1)*(q-1)*(r3-1)*(r4-1)*(r5-1)*(r6-1)*(r7-1)*(r8-1)*(r9-1)*(r10-1)*(r11-1)*(r12-1))
c=96830301447792999743877932210925094490214669785432172099311147672020980136112114653571739648595225131425493319224428213036136642899189859618195566355934768513439007527385261977662612094503054618556883356183687422846428828606638722387070581
m=pow(c,d,n)
print(long_to_bytes(m))
得到flag
11月11日是个好日子
Bugku Crpyto writeup --11月11日是个好日子_bugku 11月11日是个好日子-CSDN博客
下载解压打开附件
看得出来,有多种加密方式,其中一种为阴阳怪气编码加密
可以使用在线网址阴阳怪气编码 (jiji.pro)
或者使用软件随波逐流
解码得到:先套娃,alp只在最后一步用,注意数字哦
根据提示,多次base解码
这里推荐使用CyberChef
得到:en,i5d8{unw_ad1_f2_pg_8gea}
仿射密码
alp的长度为36位,是0123456789abcdefghijklmn的排列组合,mod:36
编写脚本进行运行
from Crypto.Util.number import *
import primefac
import math
from itertools import *
n=36
def affine_decode(c,a,b,origin="abcdefghijklmnopqrstuvwxyz0123456789+="):r=""n=len(origin)ai=primefac.modinv(a,n)%nfor i in c:if origin.find(i)!=-1:r+=origin[(ai*(origin.index(i)-b))%len(origin)]else:r+=ireturn r
for i in permutations("agvr",4):print(affine_decode("en,i5d8{unw_ad1_f2_pg_8gea}",11,11,origin="slbn7q6u0w2pf3m9tzjx8o51yke"+i[0]+i[1]+i[2]+i[3]+"dhc4i"))
报错信息No module named 'primefac'找不到primefac库
终端输入pip3 install primefac
成功安装primefac库后再次运行脚本
找出flag
EasyMath
下载附件,解压打开后
有一个文本文档文件,和一个python脚本
查看python脚本
运行得出各个值
报错没有secret库
终端输入pip3 install secret
安装secret库,再次运行脚本
CTF相关之代码py报错 from secret import FLAG ImportError: cannot import name ‘FLAG‘ from ‘secret‘-CSDN博客
运行后仍然报错
查看大佬的题解后
得知output.txt文件即为脚本输出后的结果
分析如下
编写脚本
import gmpy2
from Crypto.Util.number import *
e = 65537
c = 819167649963114752409071690942828965596762225702125422224651455091514510699221689012200925546275830031560636434571675297352911785548562558995259185529739372065415320407815802186750343466069603564453133335339468465023669871194636196892019998935207213206263690388438074192184316296023645401077877114715985230518850300854162564541697624876005006316693763495665196932392860282743136069254457238426514217654211308356576587743413266816116398061386744037936492351734676350831535904555786373417782943462487966342446324586920268533217659394595673776791727030156809145044771214337720082482665839942679556775596805037563432378445332344070307192086425710019138340320155999228758718645401601922806183309005000232793295108264248107221425831137940764747440899967198929744597645010447079132413064685696595497031622178756728371427223009071172365660399862426808614310781649262366953422451061715753988547005171624561572800209843727720479076455447302266315465616082052292906817024385349625367335127791370192543189766366250792588949920001870810018187835769296432354197933863536721500934207233900135841304460719234606155627533870809427764337881255478336303687175976104216650172450886939797274047649899113069365776930432541285901134533586020261232876898556
c1 = 1699980137266557324344914328325272464132636282755221827458872463192020874135524827987217608051368206672934330683211276768709877840468972596490803759885813728690444018491934963720438572841678828429913822054802155884199440293180952789752415462639050713771680511777055884579458058757377759627744674844108633533334457344901084171274088270351873241352667334795523258220147308594499138453672732641220818083962784902673365318410315424514270533343700860737463941309778962170226910616237946542757166553717492195935533892236503442774023121626490914033401612167978954941330133300881931925497717512695171706212382578903001110920592500175461456995288709439779857319205707173662845644405055427904509419863606240680925061916382420684482076378518205523197463067938227019763990108007075242817656584738069628913136354101292332085988235385095314890393764303221439993179548360648981274242121283353602916815145403803542637335824051819986555363523349256992995614272850197795324686379321786728586563648175181401083465608646485432113720677594958984638724107125334720354094296357390072599568691394140689362397548059953034709737955082932844672007207996936767062822977154868592390902978952191044067944696085651546627109166427150923047360912876244376114967514367037960727491317506149228522989115013325839758536585180101058382614514947428328314724097308211883678572797106209083583109261376984483242047015474025283180602280795727273381785266819469972756514932048700356409177010293248246465560904863373454995512681663614120751469186425087937476277098506766986185341057569253541467185884718825148546913924405454412786581778526929471207590180161807679236125962298541766845327682689402342086818440002212258092785616843818868009803516765308135874826622684994974230341120600336001281979511703254112012642242186568042544945546342209510451281619322586082384591244651070733725666379203036
x = 632789818728437249014397968661921775581544184224274756276433610798113468993672164321438530616013253289782663689077268876186151437864544302469108580709641566485290311420121506047579208345815027532791974738974313200169956832221919603190470863795222438259219096469376978228578380264663345353405438455186474301297012193183679157205629903265170130103917934683090733281473604073360246791105302237248347327779245961650717330972723138979527847182834557342036244971153338500301679961477335495638826895006083228659413981010440339548216034046748372206443701123739501069837327986187240490120446390477989503341189926203433991663521331801532805472205226609164816353391564959573141240378777470418994251339128482692796773797189201818245228107080728132313948392278762055786817726909473749863670490856099352687396397382321897116397931192027599070027627694680087783451302597521080702011592065963594511723809150300184064231573197933953378151145481864603829132945843828406023019349658403181028564910247213010151333549565330384930314823393041100958566895783471423052411323469971356896800670127810656782436426988914502569025478559937511734711601790440407326688723474002610311556839284338719325762246957198057778260962250609427063416142879689421634421458709
y = 643036772350048228226994649092616650645954632907587039823201793924675328231324332666556623349121829177212510871016658056913708287862858528109879661403451187304726709132260743678530717837451671681355571221280002404299107695652155670051078882192093123123561845252965958271768933274773257692931042446530995042732001095255062905223134293710172411977911384445547906762517497734345024155549903618728650384451421173225517825102299209880684634460331223065873651202939210708252359077003909032324005805452514172406303829425073706650894226101275953935372059009590759610077924785340813184927561117202564837188711962251575479458375013998344858887909613413912370566496257586437903234141740497499987400831528329286044181171784190933054960738806780037696966451373943646987424395266465375230570034361116196796918297724925148528750740437152338021273617526482564999975699692816362539898387887578959664017588135024295202965648259490954273611159737721618049049630608155576688331546213838011267525827596272825121479187503405108808503874817959024671313813455057255041638822640703012661546718752651979237589873357378433672292216062102553378571263015343101391160579720162709138758489316499316122410388218239186892007182433862338617140046642758913862484601497p = c1*gmpy2.invert(x,y) % y
q = (x*p-c1)//y
n = p*q
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
flag = long_to_bytes(m)
print(flag)
运行得出flag
缝合加密
提示:钥匙2先放放,给的密文与钥匙1有联系. 且经过测试,不同网站解出来的密文不同,所以所有密文一律用这个网站解,栅栏密码为W型http://www.metools.info/code/fence154.html
描述:密文涉及到常见的几种加密方式,有的是我自己想的加密方式,破解它吧!加油 flag格式为:flag{} 注意大小写 好运
下载解压打开附件
缝上它为:
观察上部分图形,e在字母表中,位于第五位,那么num(e)对应的数字应该是5。
框住1只小猪,需要8个栅栏,框住2只小猪,需要10个栅栏,那么框柱5只小猪,需要16个栅栏。
使用题目给的在线工具栅栏密码_栅栏密码在线加密解密【W型】-ME2在线工具 (metools.info)
WEJuITmzBYCqKnOoC1KrORKdpeZUTSl5u0R0GP41UDxPmlvRUAhBTQR4NsSeuQZKhGGLtVvGKAJ5DTs1tAtRJjOYJkFdJ28QA1XlM0uKQ2wJWNKhcY5PGFXgF1Dkyz09
看中间部分
qwedc ewqaz ewqazxcs awd edcxz ewqazxcds qazxcde edcxz qsz qsz ewqaz axd qsz edcxz qazxcde ewqazxcd qazxcs qazxcs edcxz axd ewqazxcs
键盘密码
即密码r5yg 为t
而这题是另外一种,qwedc形状类似
依次类推,解出其他符号
猪圈密码
使用在线工具猪圈密码解密-ME2在线工具进行解码
得到密钥giovanbattistabellaso
维吉尼亚加密
维吉尼亚加密/解密 - Bugku CTF
得到QWVzIGlzIFUyRnNkR1ZrWDEvbjZHSSs5b0J0OW41UCtEbldDOStGTDQ4NzZwcXZJdVVLbHpYWFJ5QSs1aHlZQjNUYzFlV28KS1JqM0hJQ2dQOVRhbU5EVFFsZ1Vwdz09
base64解码CyberChef
得到Aes is U2FsdGVkX1/n6GI+9oBt9n5P+DnWC9+FL4876pqvIuUKlzXXRyA+5hyYB3Tc1eWo
KRj3HICgP9TamNDTQlgUpw==
解码密钥2
👢👜👰👲👫👘👦👮👘👢👠👥👞👴
使用BASE100编码解码 - Bugku CTF
得到key{taowaking}
AES解码
在线AES加密 | AES解密 - 在线工具 (sojson.com)
得到flag
一段base64
bugku-writeup-Crypto-一段Base64_crypto& &bugku&writeup-CSDN博客
奇怪的密码
题目描述:突然天上一道雷电 gndk€rlqhmtkwwp}z
解题过程:
g n d k r l q h m t k w w p } z
103 110 100 107 114 108 113 104 109 116 107 119 119 112 125 122
f l a g
102 108 97 103
规律:减少1,2,3,4,5,…
编写脚本并运行
am = "gndk"
am1 = "rlqhmtkwwp}z"
for i in range(len(am)):print(chr(ord(am[i])-i-1),end='')for i in range(len(am1)):print(chr(ord(am1[i])-i-6),end='')
补充{},得到flag
flag{lei_ci_jiami}
Funny Number
下载解压打开附件
解题思路
脚本
from gmpy2 import *
from Crypto.Util.number import *c = 5390734306631855467986187436983737752151008395372308788862499432056740530367025683371238030400935613581745610066222336578420939008918998541409247659187704647583389480103444480x = invert(pow(2,10000),pow(5,175))
m = c*x%(pow(5,175))
print(long_to_bytes(m)[::-1])
运行
得到flag
你懂我的乐谱吗?
下载打开附件
是一张五线谱的图片
找了一张五线谱与键盘对照表
Bugku刷题记录(六)_乐谱密码解密-CSDN博客
参照大佬的题解,得到flag
这篇关于Bugku Crypto 部分题目简单题解(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!