• CTF 密码学(一)


    0x00 前言

      为了练习python,强迫自己能用Python的题都用python解题还有各种密码

    0x01 奇怪的字符串

      实验吧题目:信息保密的需求和实际操作自古有之,与之相应的信息加密与解密也是历史悠久,现有一段经过古典密码理论(不止一种)加密的密文,内容如下:

    89 51 82 109 89 50 86 122 97 71 107 61请找出这段密文隐藏的消息明文

      1.数字都没有超过127,ASCII码,解出来base64,然后再转得到flag

    1 import  base64
    2 s="89 51 82 109 89 50 86 122 97 71 107 61"
    3 s=s.split()
    4 d = ""
    5 for i in s:
    6     d+=(chr(int(i)))
    7 print(d)
    8 print(base64.b64decode(d))

     0x02 base??

      实验吧题目:YMFZZTY0D3RMD3RMMTIZ    这一串到底是什么!!!!为什么这么像base32却不是!!!    明文的md5值为16478a151bdd41335dcd69b270f6b985

      1.给了一段全字母全大写的字符串,提示说像base32,后来试了一下错误的,后面有md5值,网上搜了一下直接解出来了。起始作者的思路

      2 爆破列出所有的字符串组合的MD5值和给出的md5比较,如果相等,返回原字符串,得出flag,上代码

    import base64
    import hashlib
    import itertools
    
    pwd ="YMFZZTY0D3RMD3RMMTIZ"
    tables =[]
    
    #检查md5值是否相同
    def check(src):
        m1 =hashlib.md5()
        m1.update(src)
        ans =m1.hexdigest()
        if ans =="16478a151bdd41335dcd69b270f6b985":
            return 1
        else: return 0
    #生成字符串的列表
    def generateTable(string):
        lists=[]
        for i in range(len(string)):
            if str.isupper(string[i]):
                lists.append([str.lower(string[i]),string[i]])
            else: lists.append([string[i]])
        print(lists)
    #generateTable(pwd)
    lists=itertools.product(['y', 'Y'], ['m', 'M'], ['f', 'F'], ['z', 'Z'], ['z', 'Z'], ['t', 'T'], ['y', 'Y'], ['0'],
                      ['d', 'D'], ['3'], ['r', 'R'], ['m', 'M'], ['d', 'D'], ['3'], ['r', 'R'], ['m', 'M'], ['m', 'M'],
                      ['t', 'T'], ['i', 'I'], ['z', 'Z'])
    for i in lists:
        temp=''.join(i)
        if check(base64.b64decode(temp)) ==1:
            print(bytes.decode(base64.b64decode(temp)))

     0x03  Morese 加解密

    #Author TriompheL
    #2017年11月17日
    #功能:对于Morse密码的加密解密
    DeCODE = {'.-': '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',
    
            '-----': '0',  '.----': '1',  '..---': '2',
            '...--': '3',  '....-': '4',  '.....': '5',
            '-....': '6',  '--...': '7',  '---..': '8',
            '----.': '9'
            }
    EnCODE = {'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': '--..',
    
            '0': '-----',  '1': '.----',  '2': '..---',
            '3': '...--',  '4': '....-',  '5': '.....',
            '6': '-....',  '7': '--...',  '8': '---..',
            '9': '----.'
            }
    def encrypt():
        msg = raw_input('MESSAGE: ')
        ans =""
        for char in msg:
            if char == ' ':
                ans+=' '
            else:
                ans+=EnCODE[char.upper()]
                ans+=' '
                #print(EnCODE[char.upper()] + ' ')
        print(ans)
    
    def decrypt():
        msg =input('MESSAGE:')
        mores =""
        ans =""
        for char in msg:
            if char=='.' or char=='-':
                mores+=char
            if char ==' ' and mores !=' ':
                ans+=DeCODE[mores]
                mores=""
        if mores !="":
            ans+= DeCODE[mores]
            mores=""
    
        print(ans.lower())
    
    def run():
        para = input('1 is encrypt 2 is decrypt : ')
        if para == '1':
            encrypt()
        elif para == '2':
            decrypt()
        else: print(" your input is error")
    
    run()

    0x04 费纳姆密码  

    #encoding:UTF-8
    
    # 费纳姆密码
    paswd = "000000000000000000000000000000000" 
            "000000000000000000101110000110001000000101000000001"
    
    
    EnCODE ={'A':'1000001' ,'N':'1001110',
            'B': '1000010', 'O' :'1001111',
            'C': '1000011', 'P' :'1010000',
            'D': '1000100', 'Q' :'1010001',
            'E': '1000101', 'R' :'1010010',
            'F': '1000110', 'S' :'1010011',
            'G': '1000111', 'T' :'1010100',
            'H': '1001000', 'U' :'1010101',
            'I': '1001001', 'V' :'1010110',
            'J': '1001010', 'W' :'1010111',
            'K': '1001011' ,'X' :'1011000',
            'L': '1001100' ,'Y' :'1011001',
            'M': '1001101' ,'Z' :'1011010'
    }
    DeCODE={
            '1000001':'A',  '1001110':'N',
            '1000010':'B',  '1001111':'O',
            '1000011':'C',  '1010000':'P',
            '1000100':'D',  '1010001':'Q',
            '1000101':'E',  '1010010':'R',
            '1000110':'F',  '1010011':'S',
            '1000111':'G',  '1010100':'T',
            '1001000':'H',  '1010101':'U',
            '1001001':'I',  '1010110':'V',
            '1001010':'J',  '1010111':'W',
            '1001011':'K',  '1011000':'X',
            '1001100':'L',  '1011001':'Y',
            '1001101':'M',  '1011010':'Z'
    }
    #加密
    def encrypt():
        msg =input("Input Message:")
        ans  =""
    
        for char in msg:
            if char ==' ':
                ans+= ' '
            else: ans+=EnCODE[char.upper()]+' '
        print(ans)
    #解密
    def decrypt():
        msg =input('MESSAGE:')
        german =""
        ans =""
        for char in msg:
            if char=='0' or char=='1':
                german+=char
            if len(german)==7:
                ans+=DeCODE[german]
                german=""
    
        print(ans)
    
    def run():
        para = input('1 is encrypt 2 is decrypt : ')
        if para == '1':
            encrypt()
        elif para == '2':
            decrypt()
        else: print(" your input is error")
    
    run()
  • 相关阅读:
    7.1 深搜子集和问题 (枚举子集+剪枝)
    javascript的运算符
    javascript中的数据类型Null
    其他进制数字转换
    javascript数据类型转换number
    javascript强制数据类型转换String
    自增自减
    一元运算符
    javascript中的数据类型boolean
    自增自减的练习
  • 原文地址:https://www.cnblogs.com/Triomphe/p/7834997.html
Copyright © 2020-2023  润新知