还在加载 请稍等一下辣ヾ(≧▽≦*)o . . .

BUUCTF-Crypto第一页(Md5-信息化时代步伐)解题思路


前言

CTF比赛!!

一.MD5

题目就是提示

下载附件,打开文件,是md5,解密网址👉,在线md5解密,解密即可。

flag:flag{admin1}


二.一眼就解密

没有附件,提示如下

下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30= 注意:得到的 flag 请包上 flag{} 提交

发现是base64编码,解密网址👉在线base64解密,解密即可。

flag:flag{THE_FLAG_OF_THIS_STRING}


三.url编码

题目就是提示

下载附件,发现是url编码,在线解密网址👉url在线解密,解密即可。

flag:flag{and 1=1}


四.看我回旋踢

没有提示

下载附件,内容👉synt{5pq1004q-86n5-46q8-o720-oro5on0417r1},看样子有点像凯撒和栅栏,每个都去试试,最后尝试是凯撒,凯撒移动13位,在线解密网址,在线凯撒解密,即可

flag:flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}


五.摩丝

题目就是提示

打开txt文本,内容如下👉.. .-.. --- ...- . -.-- --- ..-,摩斯密码在线解密即可,在线摩斯密码加密解密,解密结果是ILOVEYOU

flag:flag{ILOVEYOU}


六.password

没有提示

下载附件,发现里面是姓名和生日,想了想一般人密码不就是自己的名字缩写加上生日吗,或者是生日加上名字缩写,尝试后发现是名字缩写加上生日。

flag:flag{zs19900315}


七.变异凯撒

提示就是变异凯撒。

下载附件,密文是afZ_r9VYfScOeO_UL^RWUc,是用的是ASCII变异,afz_对应的ASCII编码是97 102 90 95 而flag这个字眼对应的是102 108 97 103,就会发现:97+5=102 102+6=108 90+7=97 95+8=103,由此,python代码如下(借鉴的)。

def b_kaisa(str):

    first_step = 5 #首位ascii码的位移步长
    i = 0
    result = []

    for i in range(len(str)):
        as_num = ord(str[i]) #将数据序列变为ascii码
        as_num += first_step
        result.append(as_num) #将变为ascii码后的数据序列加入数组

        first_step += 1
        i += 1

    return result

question = 'afZ_r9VYfScOeO_UL^RWUc'
result = b_kaisa(question)
print(result)

#由于函数体返回的是一个ascii码的数据序列,类型为列表,我们要将他转化成字符串类型
for i in result:
    print(chr(i),end='')

flag:flag{Caesar_variation}


八.Quoted-printable

题目就是提示

下载附件,👉在线Quoted-printable解码,即可。

flag:flag{那你也很棒哦}


九.Rabbit

题目就是提示,兔子加密解密

下载附件,👉rabbit在线解密,在线解密即可。

flag:flag{Cute_Rabbit}


十.篱笆墙的影子

提示如下

星星还是那颗星星哟 月亮还是那个月亮 山也还是那座山哟 梁也还是那道梁 碾子是碾子 缸是缸哟 爹是爹来娘是娘 麻油灯呵还吱吱响 点的还是那么丁点亮 哦哦 注意:得到的 flag 请包上 flag{} 提交

我表示不懂,下载附件,打开附件,附件内容👉felhaagv{ewtehtehfilnakgw},根据题目猜测应该是栅栏密码,在线解密👉栅栏在线解密,解密即可。

flag:flag{wethinkwehavetheflag}


十一.RSA

下载附件,附件内容如下,需要我们求出d,根据公式(e*d)modφ(n)=1,👉RSA加密原理

p=473398607161	q=4511491	e=17

求φ(n):(p-1)(q-1)=(473398607161-1)*(4511491-1)=2135733082216268400,根据公式计算出d为125631357777427553

怎么可能是手算的,脚本如下。

import libnum
p = 473398607161
q = 4511491
e = 17
fn = (p-1)*(q-1)
print(libnum.invmod(e,fn))

flag:flag{125631357777427553}


十二.丢失的MD5

下载附件发现是python2代码,如下。

import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print des

在python3里面不能运行,一眼发现错误。

print des
修改为
print(dex)

运行结果如下图👇

意思是必须在哈希之前对Unicode进行编码,修改代码如下👇。

import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'.encode('utf-8')+chr(i).encode('utf-8')+'O3RJMV'.encode('utf-8')+chr(j).encode('utf-8')+'WDJKX'.encode('utf-8')+chr(k).encode('utf-8')+'ZM'.encode('utf-8'))
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(des)

得到flag:flag{e9032994dabac08080091151380478a2}


十三.Alice与Bob

提示如下

密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。 注意:得到的 flag 请包上 flag{} 提交

根据题目要求分解两个素数,👉在线分解,如果不用在线分解也可以使用python代码,代码👇。

n=int(input("请输入需要分解的整数:"))                  #让用户输入数字
num=n                           #赋值
m=[]                            #创建空列表
while n!=1:                     #判断如果n不是1,那么就循环
    for i in range(2,n+1):      #循环从2到n加1位数字
        if n % i == 0:          #判断,如果n除以i的余数为0
            m.append(str(i))    #如果余数为0,那么就把i转换为字符串然后加入到m列表里面去
            n = n//i            #如果余数为0,那么用n来除以i做向下取整数
            break               #如果余数为0,结束循环
print("分解的素数为:",num,'=','*'.join(m))      #输出

分解后,数字为101999*966233,重新组成数字为101999966233,将重新组成的数字进行md5的32位小写哈希👉在线MD5加密,也可以使用python,如下代码👇。

import hashlib
def hash():
    str = '101999966233'
    md5 = hashlib.md5()  # 创建md5对象
    md5.update(str.encode('utf-8')) #必须要进行encode编码
    print(md5.hexdigest())

if __name__ == '__main__':
    hash()

结果为d450209323a847c8d01c6be47c81811a

flag:flag{d450209323a847c8d01c6be47c81811a}


十四.rsarsa

这是让我眼前一黑的题,就是表面意思,眼前一黑,下载附件,反正大概意思就是求m,不懂rsa的可以看这篇文章👉RSA,套公式c^dmodn=m

题目内容如下👇。

p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

需要求d是多少,求d公式:(e*d)modφ(n)=1,φ(n)的求法就是(p-1)*(q-1),数字太大,直接python脚本吧,如下👇,输出的结果就是d

import libnum
p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
fn = (p-1)*(q-1)
print(libnum.invmod(e,fn))

最终求m,python脚本如下,就是我自己写的( •̀ ω •́ )✧,虽然很简单233333。

import libnum
p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
n = p*q
fn = (p-1)*(q-1)
d = libnum.invmod(e,fn)
m = pow(c,d,n)      #为c的d次方然后在对n取余数
print(m)

最终m:5577446633554466577768879988,flag:flag{5577446633554466577768879988}


十五.大帝的密码武器

下载下来的文件没有后缀需要修改为.zip文件解压,解压之后,发现有两个文件,题目的介绍一看就是凯撒👉在线加密解密凯撒,或者如下python代码👇,一个一个的看,发现移动十三位数是security是一个正常的单词,其他都不正常,由此判断是移动了13位,加密密文ComeChina也可以用如下代码移动13位,加密过后是pbzrpuvan,当然这个不是flag,需要把两个p变成大写(我就被坑了)

def caser():
    flag = "ComeChina".lower()
    dict_txt = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'.lower()
    enc = []
    for k in range(1,26):
        for i in flag:
            enc.append(dict_txt[dict_txt.index(i)+k])   #寻找i里面的dict_txt的索引值加上k
        print("移动了%d位"%k)
        print("".join(enc))
        print()
        enc = []        #每次循环完毕,列表清空
if __name__ == '__main__':
    caser()

最终flag:flag{PbzrPuvan}


十六.Windows系统密码

下载附件,使用记事本打开,👉md5在线解密,发现一个ctf用户,第一个md5解密解不开,第二个解开了是good-luck,拿去提交,发现提交成功。

flag:flag{good-luck}


十七.信息化时代的步伐

提示如下

也许中国可以早早进入信息化时代,但是被清政府拒绝了。附件中是数十年后一位伟人说的话的密文。请翻译出明文(答案为一串中文!) 注意:得到的 flag 请包上 flag{} 提交

打开附件一大串数字,根据提示,应该是中文电码,👉中文电码查询,结果如下👇。

6060:计
4615:算
2623:机
6008:要
1783:从
1216:娃
1216:娃
2119:抓
6386:起

所以,flag:flag{计算机要从娃娃抓起}

计算机要从娃娃抓起——邓小平



文章作者: 坂琴
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 坂琴 !
评论
  目录