CTF 密码学(一)
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()
CTF 密码学(一)的更多相关文章
- CTF密码学常见加解密总结
CTF密码学常见加解密总结 2018年03月10日 19:35:06 adversity` 本文链接:https://blog.csdn.net/qq_40836553/article/details ...
- CTF密码学总结
CTF中那些脑洞大开的编码和加密 摘自:https://www.cnblogs.com/mq0036/p/6544055.html 0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到 ...
- ctf密码学习题总结
1.变异凯撒 加密密文:afZ_r9VYfScOeO_UL^RWUc格式:flag{ } 一看题中说的是凯撒加密,我就赶快使用工具列出了所有的组合,然而发现没有一个是我想要的. 于是乎,又重新审题 ...
- CTF<密码学> writeup 传统知识+古典密码
小明某一天收到一封密信,信中写了几个不同的年份 辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳. 信的背面还写有“+甲子”,请解出这段密文. key值:CTF{XXX} 百度可以查到 ...
- ctf密码学------密文解码python脚本(凯撒解密)
题目来源实验吧 分析题意,说是困在栅栏中,所以将字符栅栏解密看看有什么,利用工具CTFcraktools 得到三条密文 然后说是密码是凯撒,在将四栏依次凯撒解码,寻找可能的key,这里很显然,在尝试第 ...
- CTF密码学之摩斯密码
通过不用的排列顺序来表达不用的英文字母,数字和标点符号,摩斯电码由.和_构成 字母 字符 电码符号 字符 电码符号 A ._ N _. B _... O _ _ _ C _._. P ._ _. D ...
- CTF密码学之凯撒加密
在加密的各种算法中,凯撒加密是最简单的也是最常见的一种加密方法,它的中心思想是替换,ROT加密其实就是凯斯加密的变种. 即明文的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文 ...
- 南京邮电大学CTF密码学部分Writeup
异性相吸 1.xor 2.hex2binary 3.len(bin(miwen))==len(bin(mingwen)) # -*- coding:utf-8 -*- file_de = open(' ...
- 南邮CTF密码学,mixed_base64
# -*- coding:utf-8 -*- from base64 import * flag = open("code.txt").readline() # 读取密文 for ...
随机推荐
- MySQL新建数据库时utf8_general_ci编码解释
utf8_unicode_ci和utf8_general_ci对中英文来说没有实质的差别.utf8_general_ci: 校对速度快,但准确度稍差.utf8_unicode_ci: 准确度高,但校对 ...
- net core 发布docker镜像的官方写法
使用vscode发布的镜像可能存在不能运行的问题, 可以去docker的官方文档下找一个标准的格式再替换一下就可以用了: FROM mcr.microsoft.com/dotnet/core/sdk: ...
- SQL语句:随机取3条不重复的记录
随机取3条不重复的记录 [Access]select top 3 * from tablename order by rnd(id); [SqlServer]select top 3 * from t ...
- python 将图片存入mongodb,读取图片,gridfs模块
导入图片引入模块,其中gridfs模块不需要单独安装,引入了pymongo即可直接引入from pymongo import MongoClientfrom gridfs import *import ...
- UVA1629_Cake slicing
Cake slicing 给你一个矩形大小,和每个樱桃的坐标,现在让你去切使得切之后的小矩形包含一个樱桃,每次切的代价是切痕的长度,问你最小代价是多少 思路: 首先要明白一点,不能切除一个不含樱桃的矩 ...
- mongo数据库基本查询语句
D:\MongoDB\Server\3.4\bin>mongo MongoDB shell version v3.-g83c3022fe4 connecting to: mongodb://12 ...
- leetcode.双指针.88合并两个有序数组-Java
1. 具体题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别 ...
- Ubuntu中实现Docker内安装jenkins+jenkins远程触发
前面做了在ubuntu中安装jenkins+docker实现自动部署,但是得安装jdk8+tomcat8环境,比较麻烦,因此本文记录如何将jenkins直接装在dockers内并且实现远程触发功能. ...
- Mac读写NTFS硬盘
简明教程: 1.插上硬盘后,查看你的硬盘名称,这里假设名称是Untitled,牢记 2.在终端输入sudo nano /etc/fstab 敲击回车 3.现在你看到了一个编辑界面,输入LABEL=Un ...
- 2019牛客多校第一场E ABBA 贪心 + DP
题意:问有多少个有(n + m)个A和(n + m)个B的字符串可以凑出n个AB和m个BA. 思路:首先贪心的发现,如果从前往后扫,遇到了一个A,优先把它看成AB的A,B同理.这个贪心策略用邻项交换很 ...