0x00 前言

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

0x01 奇怪的字符串

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

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

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

 import  base64
s="89 51 82 109 89 50 86 122 97 71 107 61"
s=s.split()
d = ""
for i in s:
d+=(chr(int(i)))
print(d)
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'], [''],
['d', 'D'], [''], ['r', 'R'], ['m', 'M'], ['d', 'D'], [''], ['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', '-----': '', '.----': '', '..---': '',
'...--': '', '....-': '', '.....': '',
'-....': '', '--...': '', '---..': '',
'----.': ''
}
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': '--..', '': '-----', '': '.----', '': '..---',
'': '...--', '': '....-', '': '.....',
'': '-....', '': '--...', '': '---..',
'': '----.'
}
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 == '':
encrypt()
elif para == '':
decrypt()
else: print(" your input is error") run()

0x04 费纳姆密码  

#encoding:UTF-8

# 费纳姆密码
paswd = "" \
"" EnCODE ={'A':'' ,'N':'',
'B': '', 'O' :'',
'C': '', 'P' :'',
'D': '', 'Q' :'',
'E': '', 'R' :'',
'F': '', 'S' :'',
'G': '', 'T' :'',
'H': '', 'U' :'',
'I': '', 'V' :'',
'J': '', 'W' :'',
'K': '' ,'X' :'',
'L': '' ,'Y' :'',
'M': '' ,'Z' :''
}
DeCODE={
'':'A', '':'N',
'':'B', '':'O',
'':'C', '':'P',
'':'D', '':'Q',
'':'E', '':'R',
'':'F', '':'S',
'':'G', '':'T',
'':'H', '':'U',
'':'I', '':'V',
'':'J', '':'W',
'':'K', '':'X',
'':'L', '':'Y',
'':'M', '':'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=='' or char=='':
german+=char
if len(german)==7:
ans+=DeCODE[german]
german="" print(ans) def run():
para = input('1 is encrypt 2 is decrypt : ')
if para == '':
encrypt()
elif para == '':
decrypt()
else: print(" your input is error") run()
05-14 18:09