攻防世界CRYPTO---新手練習區(新手強烈推薦借鑒)


借鑒前聲明:只有解題思路沒有直接給出flag,其目的只是想分享一下作者在做這些題時的一些解題思路,只是希望為讀者得到一些小小的幫助

001:base64

 

題目描述:元宵節燈謎是一種古老的傳統民間觀燈猜謎的習俗。 因為謎語能啟迪智慧又饒有興趣,燈謎增添節日氣氛,是一項很有趣的活動。 你也很喜歡這個游戲,這不,今年元宵節,心里有個黑客夢的你,約上你青梅竹馬的好伙伴小魚, 來到了cyberpeace的攻防世界猜謎大會,也想着一展身手。 你們一起來到了小孩子嘰嘰喳喳吵吵鬧鬧的地方,你倆抬頭一看,上面的大紅燈籠上寫着一些奇奇怪怪的 字符串,小魚正納悶呢,你神秘一笑,我知道這是什么了。

 

解題思路:直接base64進行解密得到flag,此題考察選手對base64編碼的識別

 

 

002:Caesar

 

 

題目描述:你成功的解出了來了燈謎,小魚一臉的意想不到“沒想到你懂得這么多啊!” 你心里面有點小得意,“那可不是,論學習我沒你成績好輪別的我知道的可不比你少,走我們去看看下一個” 你們繼續走,看到前面也是熱熱鬧鬧的,同樣的大紅燈籠高高掛起,旁邊呢好多人嘰嘰喳喳說個不停。你一看 大燈籠,上面還是一對字符,你正冥思苦想呢,小魚神秘一笑,對你說道,我知道這個的答案是什么了

 

 

解題思路:首先可以先翻譯一下標題Caesar--->凱撒,所以可以直接聯想到凱撒密碼(點擊可查看凱撒密碼的原理),此題考察選手對凱撒密碼的了解即其破解

 

 

解決代碼(python):

 1 print("凱撒密碼解密")
 2 # 密文
 3 str2 = input("請輸入密文:");
 4 # 密鑰(平移位數)
 5 print("密文:", end='')
 6 for my in range(0, 64):
 7     s = ""
 8     print()
 9     for i in str2:
10         mw = ord(i)
11         if (64 < mw < 91):  # 大寫字母
12             jm = mw + my
13             if jm > 90:
14                 jm = (mw - 26) + my
15                 s += chr(jm);
16                 print(chr(jm), end='')
17             else:
18                 s += chr(jm);
19                 print(chr(jm), end='')
20         elif (96 < mw < 123):  # 小寫字母
21             jm = mw + my
22             if jm > 122:
23                 jm = (mw - 26) + my
24                 s += chr(jm);
25                 print(chr(jm), end='')
26             else:
27                 s += chr(jm);
28                 print(chr(jm), end='')
29         else:  # 數字和特殊字符不做修改
30             jm = mw + 0
31             s += chr(jm);
32             print(chr(jm), end='')
33     print()

 





003:Morse

題目描述小魚得意的瞟了你一眼,神神氣氣的拿走了答對謎語的獎勵,你心里暗暗較勁 想着下一個謎題一定要比小魚更快的解出來。不知不覺你們走到了下一個謎題的地方,這個地方有些奇怪。 上面沒什么提示信息,只是刻着一些0和1,感覺有着一些奇怪的規律,你覺得有些熟悉,但是就是想不起來 這些01代表着什么意思。一旁的小魚看你眉頭緊鎖的樣子,撲哧一笑,對你講“不好意思我又猜到答案了。”(flag格式為cyberpeace{xxxxxxxxxx},均為小寫)

 

 

解題思路:同上先翻譯標題Morse-->摩斯,所以可以直接想到摩斯密碼,此題考察選手對摩斯密碼的了解及其破解方式

 

解決代碼(python):

CODE_TABLE = {

    # 26 個英文字符

    'A': '.-', 'B': '-...', 'C': '-.-.',

    'D': '-..', 'E': '.', 'F': '..-.',

    'G': '--.', 'H': '....', 'I': '..',

    'J': '.---', 'K': '-.-', 'L': '.-..',

    'M': '--', 'N': '-.', 'O': '---',

    'P': '.--.', 'Q': '--.-', 'R': '.-.',

    'S': '...', 'T': '-', 'U': '..-',

    'V': '...-', 'W': '.--', 'X': '-..-',

    'Y': '-.--', 'Z': '--..',

    # 10 個數字

    '0': '-----', '1': '.----', '2': '..---',

    '3': '...--', '4': '....-', '5': '.....',

    '6': '-....', '7': '--...', '8': '---..',

    '9': '----.',

    # 16 個特殊字符

    ',': '--..--', '.': '.-.-.-', ':': '---...', ';': '-.-.-.',

    '?': '..--..', '=': '-...-', "'": '.----.', '/': '-..-.',

    '!': '-.-.--', '-': '-....-', '_': '..--.-', '(': '-.--.',

    ')': '-.--.-', '$': '...-..-', '&': '. . . .', '@': '.--.-.'

    # 你還可以自定義

}


def morsedecode(morse):


    msg = ''

    codes = morse.split(' ')

    for code in codes:

        if code == '':

            msg += ' '

        else:

            UNCODE = dict(map(lambda t: (t[1], t[0]), CODE_TABLE.items()))

            msg += UNCODE[code]

    return msg

str = input("please enter str:")

# 用於替換密文中的一些符號

# str=str.replace('/',' ')

flag = morsedecode(str)

print(flag.lower())

 


注意:進行解密時要記得將字符串中全部轉化成.或-





004 混合編碼




題目描述
經過了前面那么多題目的歷練,耐心細致在解題當中是 必不可少的品質,剛巧你們都有,你和小魚越來越入迷。那么走向了下一個題目,這個題目好長 好長,你知道你們只要細心細致,答案總會被你們做出來的,你們開始慢慢的嘗試,慢慢的猜想 ,功夫不負有心人,在你們耐心的一步步的解答下,答案躍然紙上,你倆默契一笑,相視擊掌 走向了下面的挑戰。格式為cyberpeace{小寫的你解出的答案}



解題思路:看標題可得這個應該是將flag進行了多層加密(多種加密方式進行加密),打開文件看到最后有=即可初步判斷是base,但不知其是64,32還是16,所以要一步步試,得出為base64,將其解碼得到,仔細一看可看出有大量&#符號及可初步判斷為html實體,所以只要將其進行html解碼即可,解碼后又得到一串字符串,此時對於新手要注意,看到一串字符串可先進行判斷其是否為16進制,即最大的字母有沒有超過F沒有則初步判斷為16進制,然后進行解碼,
反之再去試base,通過測試其為base64,得到一串數字而且有大量/,仔細看可得出其每組數字都沒有大於124,其可初步判斷其為ascall碼值,將其ascall碼轉換成字符串,得到welcometoattackanddefenceworld,是一個完整的句子,所以解碼成功,記得按照題目的格式進行輸入此題考察選手對一些常見的編碼方式的了解及其破解




005 不僅僅是Morse

題目描述“這個題目和我們剛剛做的那個好像啊但是為什么按照剛剛的方法做出來答案卻不對呢” ,你奇怪的問了問小魚,“可能是因為還有一些奇怪的加密方式在里面吧,我們在仔細觀察觀察”。兩個人 安安靜靜的坐下來開始思考,很耐心的把自己可以想到的加密方式一種種的過了一遍,十多分鍾后兩個人 異口同聲的說“我想到了!”。一種食物,格式為cyberpeace{小寫的你解出的答案}


解題思路: 看標題可得出此題必然不止摩斯密碼一種加密方式,先將其按照003那道題的代碼進行摩斯密碼破解得到一串字符串得到只有A和B二個字母組成的字符串,根據題目描述中提到的一種食物在加上常見的僅由二個字母組成的加密方式即可聯想到培根密碼


破解培根密碼代碼:
letters1 = [
    'A', 'B', 'C', 'D', 'E', 'F', 'G',
    'H', 'I', 'J', 'K', 'L', 'M', 'N',
    'O', 'P', 'Q', 'R', 'S', 'T',
    'U', 'V', 'W', 'X', 'Y', 'Z',
]
letters2 = [
    'a', 'b', 'c', 'd', 'e', 'f', 'g',
    'h', 'i', 'j', 'k', 'l', 'm', 'n',
    'o', 'p', 'q', 'r', 's', 't',
    'u', 'v', 'w', 'x', 'y', 'z',
]
cipher1 = [
    "aaaaa", "aaaab", "aaaba", "aaabb", "aabaa", "aabab", "aabba",
    "aabbb", "abaaa", "abaab", "ababa", "ababb", "abbaa", "abbab",
    "abbba", "abbbb", "baaaa", "baaab", "baaba", "baabb",
    "babaa", "babab", "babba", "babbb", "bbaaa", "bbaab",
]
cipher2 = [
    "AAAAA", "AAAAB", "AAABA", "AAABB", "AABAA", "AABAB", "AABBA",
    "AABBB", "ABAAA", "ABAAA", "ABAAB", "ABABA", "ABABB", "ABBAA",
    "ABBAB", "ABBBA", "ABBBB", "BAAAA", "BAAAB", "BAABA",
    "BAABB", "BAABB", "BABAA", "BABAB", "BABBA", "BABBB",
]


def bacon1(string):
    lists = []
    # 分割,五個一組
    for i in range(0, len(string), 5):
        lists.append(string[i:i+5])
    s=''
    print(lists)
    # 循環匹配,得到下標,對應下標即可
    for i in range(0, len(lists)):
        for j in range(0, 26):
            if lists[i] == cipher1[j]:
                s+=letters2[j];
                print(lists[i]+'='+letters2[j], end=",")
    print()
    return s


def bacon2(string):
    lists = []
    # 分割,五個一組
    for i in range(0, len(string), 5):
        lists.append(string[i:i+5])
    # print(lists)
    # 循環匹配,得到下標,對應下標即可
    for i in range(0, len(lists)):
        for j in range(0, 26):
            if lists[i] == cipher2[j]:
                # print(j)
                print(letters2[j], end="")
    print("")
if __name__ == "__main__":
    result=input("please enter your str:")
    print("培根密碼解密得到的結果為:"+bacon1(result))
    bacon2(result)

 




 
        
005 冪數加密
題目描述:你和小魚終於走到了最后的一個謎題所在的地方,上面寫着一段話“親愛的朋友, 很開心你對網絡安全有這么大的興趣,希望你一直堅持下去,不要放棄 ,學到一些知識,
走進廣闊的安全大世界”,你和小魚接過謎題,開始了耐心細致的解答。flag為cyberpeace{你解答出的八位大寫字母}


解密思路:看標題可得是冪數加密,觀察數字你會發現出現了8,通過字母加密結果對照發現並沒有出現8這個數字,難道題出錯了?不不不!!!!這種是冪數加密的一種特殊加密方式-->01248密碼,
01248密碼,又稱雲影密碼…與二進制冪加密不同,這個加密法采用的是0作間隔,其他非0數隔開后組合起來相加表示序號1-26之一的字母(a/A,b/B,c/C…z/Z),通過01248密碼的定義可將其分組從而進行解密此題考驗選手對冪數加密的了解,並了解到其包含着一些特殊的密碼



如果喜歡作者可點贊關注來支持一下作者,作者也為你的點贊關注表示真誠的謝意,同時作者滿懷希望着大佬們評論指出自己文檔中的不足或者解題思路的缺陷.

如果喜歡作者可點贊關注來支持一下作者,
作者也為你的點贊關注表示真誠的謝意,同時作者滿懷希望着大佬們評論指出自己文檔中的不足或者解題思路的缺陷.

如果喜歡作者可點贊關注來支持一下作者,
作者也為你的點贊關注表示真誠的謝意,同時作者滿懷希望着大佬們評論指出自己文檔中的不足或者解題思路的缺陷.
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM