Bugku Crypto 部分题目简单题解(三)

where is flag 5

下载打开附件

Gx8EAA8SCBIfHQARCxMUHwsAHRwRHh8BEQwaFBQfGwMYCBYRHx4SBRQdGR8HAQ0QFQ==

看着像base64解码

尝试后发现,使用在线工具无法解密

编写脚本

import base64

enc = '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+=1
    zh=zh*2+int(i)
    if j ==7:
        j=0
        s4=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)+1
            q=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 = 1
    for i in mList:
        M = M * i
    x = 0
    for i in range(len(mList)):
        Mi = M // mList[i]
        Mi_inverse = gmpy2.invert(Mi, mList[i])
        x += aList[i] * Mi * Mi_inverse
    x = x % M
    return 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)%n
    for i in c:
        if origin.find(i)!=-1:
            r+=origin[(ai*(origin.index(i)-b))%len(origin)]
        else:
            r+=i
    return 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 = 643036772350048228226994649092616650645954632907587039823201793924675328231324332666556623349121829177212510871016658056913708287862858528109879661403451187304726709132260743678530717837451671681355571221280002404299107695652155670051078882192093123123561845252965958271768933274773257692931042446530995042732001095255062905223134293710172411977911384445547906762517497734345024155549903618728650384451421173225517825102299209880684634460331223065873651202939210708252359077003909032324005805452514172406303829425073706650894226101275953935372059009590759610077924785340813184927561117202564837188711962251575479458375013998344858887909613413912370566496257586437903234141740497499987400831528329286044181171784190933054960738806780037696966451373943646987424395266465375230570034361116196796918297724925148528750740437152338021273617526482564999975699692816362539898387887578959664017588135024295202965648259490954273611159737721618049049630608155576688331546213838011267525827596272825121479187503405108808503874817959024671313813455057255041638822640703012661546718752651979237589873357378433672292216062102553378571263015343101391160579720162709138758489316499316122410388218239186892007182433862338617140046642758913862484601497

p = 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 = 5390734306631855467986187436983737752151008395372308788862499432056740530367025683371238030400935613581745610066222336578420939008918998541409247659187704647583389480103444480
 
x = invert(pow(2,10000),pow(5,175))
m = c*x%(pow(5,175))
print(long_to_bytes(m)[::-1])

运行

得到flag

你懂我的乐谱吗?

下载打开附件

是一张五线谱的图片

找了一张五线谱与键盘对照表

Bugku刷题记录(六)_乐谱密码解密-CSDN博客

参照大佬的题解,得到flag

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:格罗斯费尔德密码(Gronsfeld cipher)是一种类似于维吉尼亚密码的加密方法,不同之处在于使用数字代替字母。可以选择不同的数列作为密钥,如斐波那契数列或其他伪随机序列。密码分析过程与维吉尼亚密码类似,但自动密钥密码无法使用卡西斯基算法(kasiski)来破译。\[1\]举个例子,使用格罗斯费尔德密码对明文"THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"进行加密,密钥为\[2,20,11,45,20,43,4\],得到的密文为"VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK"。解密同样的密文可以得到原始的明文。\[1\] 引用\[3\]:在密码学中,三维格子密码是一种基于格子理论的加密方法。它使用三维空间中的格子来进行加密和解密操作。三维格子密码的具体实现方式和算法较为复杂,涉及到多个参数和运算。在实际应用中,三维格子密码被广泛用于保护敏感信息的安全性。\[3\] 综上所述,Crypto三维格子可能指的是三维格子密码,一种基于格子理论的加密方法。 #### 引用[.reference_title] - *1* *2* [常见密码和编码总结 CTF中Crypto和Misc必备](https://blog.csdn.net/weixin_44604541/article/details/109817480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [CTF-Crypto 密码原理及解密方法](https://blog.csdn.net/yifijhjh/article/details/127638142)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值