攻防世界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