• 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()
  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/Triomphe/p/7834997.html
Copyright © 2020-2023  润新知