1. 程式人生 > 其它 >BUUCTF密碼學(crypto)

BUUCTF密碼學(crypto)

異性相吸,還原大師,[GKCTF2020]漢字的祕密

異性相吸

題目:最近出現了一個奇葩觀點,說性別都不一樣,怎麼能談戀愛?為了證明這個觀點錯誤,請大家證明異性是相吸的。 注意:得到的 flag 請包上 flag{} 提交
解:
第一步:先用winhex開啟在這裡插入圖片描述在這裡插入圖片描述第二步:看是奇數偶數,相同就做減法,不同就做加法,注意這個是十六進位制
第三步:ASCII碼轉字元
下面是找的程式碼

// key = open("key.txt", 'rb').read()
cipher = open("密文.txt", "rb"
).read() flag = [] result = "" for i in range(len(key)): flag.append(key[i] ^ cipher[i]) result += chr(flag[i]) print(flag) print(result)

flag{ea1bc0988992276b7f95b54a7435e89e}

還原大師

題目:我們得到了一串神祕字串:TASC?O3RJMV?WDJKX?ZM,問號部分是未知大寫字母,為了確定這個神祕字串,我們通過了其他途徑獲得了這個字串的32位MD5碼。但是我們獲得它的32位MD5碼也是殘缺不全,E903???4DAB???08???51?80??8A?,請猜出神祕字串的原本模樣,並且提交這個字串的32位MD5碼作為答案。 注意:得到的 flag 請包上 flag{} 提交

解:直接上程式碼MD5爆破

// # -*- coding: utf-8 -*-
#!/usr/bin/env python
import hashlib

#print hashlib.md5(s).hexdigest().upper()
k = 'TASC?O3RJMV?WDJKX?ZM'                    #要還原的明文
for i in range(26):
	temp1 = k.replace('?',str(chr(65+i)),1)
	for j in range(26):
		temp2 = temp1.replace('?',chr(65+j),1)
		for n in
range(26): temp3 = temp2.replace('?',chr(65+n),1) s = hashlib.md5(temp3.encode('utf8')).hexdigest().upper()#注意大小寫 if s[:4] == 'E903': #檢查元素 print (s) #輸出密文

執行,即得flag
flag{E9032994DABAC08080091151380478A2}

借鑑https://blog.csdn.net/MikeCoke/article/details/106118054?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161122596816780271576944%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161122596816780271576944&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-3-106118054.first_rank_v2_pc_rank_v29&utm_term=%E8%BF%98%E5%8E%9F%E5%A4%A7%E5%B8%88&spm=1018.2226.3001.4187

[GKCTF2020]漢字的祕密

題目:你能看出漢字的奧祕嗎? 答案形式:flag{小寫字母}
附件:王壯 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由
土夫 井中 士夫 王工 王人 土由 由口夫

解: 該題涉及當鋪密碼

當鋪密碼:有幾個突出,就是幾。
如:王字,6個突出 ,即6
由字,1個突出,即1
田字,沒有突出,即0

上程式碼

//dh = '田口由中人工大土士王夫井羊壯'
ds = '00123455567899'

cip = '王壯 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由 土夫 井中 士夫 王工 王人 土由 由口夫'
s = ''
for i in cip:
	if i in dh:
		s += ds[dh.index(i)]
	else:
		s += ' '
#print(s)

ll = s.split(" ")
t = ''
for i in range(0,len(ll)):
	t += chr(int(ll[i])+i+1)
print('t=', t, '\t\tt.lower()=', t.lower())

flag{you_are_good}
參考部分WP-GKCTF2020