MarkdownPad Document
那些年做过的ctf之加密篇(加强版)
大部分转自WooYun知识库,加入了笔者自己的理解
0x01 Base64
Base64: ZXZhbCgkX1BPU1RbcDRuOV96MV96aDNuOV9qMXVfU2gxX0oxM10pNTU2NJC3ODHHYWJIZ3P4ZWY=
Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='
Base32: Base32和Base64相比只有一个区别就是,用32个字符表示256个ASC字符,也就是说5个ASC字符一组可以生成8个Base字符,反之亦然。
base64在线编解码:http://base64.xpcha.com/
base32在线解码(需翻墙):http://emn178.github.io/online-tools/base32_decode.html
或者使用python脚本解码:
1 C:Python27>python 2 Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32 3 Type "help", "copyright", "credits" or "license" for more information. 4 >>> import base64 5 >>> str = 'haha' 6 >>> base64.b64encode(str) 7 'aGFoYQ==' 8 >>> base64.b64decode('aGFoYQ==') 9 'haha'
把脚本中的b64decode换为b32decode即可实现base32的解码
0x02 希尔密码
希尔密码:密文: 22,09,00,12,03,01,10,03,04,08,01,17 (明文:wjamdbkdeibr)
解题思路:使用的矩阵是 1 2 3 4 5 6 7 8 10
暂没找到合适的在线解密网站或者好用的脚本,只能对具体问题求解;如有好用的工具,忘不啬指教!
0x03 栅栏密码
栅栏密码:把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。
密文样例:tn c0afsiwal kes,hwit1r g,npt ttessfu}ua u hmqik e {m, n huiouosarwCniibecesnren.
解密程序:
1 char s[]= "tn c0afsiwal kes,hwit1r g,npt ttessfu}ua u hmqik e {m, n huiouosarwCniibecesnren."; 2 char t[86]= ""; 3 int i,j,k; 4 k=0; 5 for (i=0;i<17;i++) 6 { 7 for(j=0;j<5;j++) 8 { 9 t[k++]= ch[j*17+i]; 10 } 11 } 12 for(i=0;i<85;i++) 13 { 14 printf("%c",t[i]); 15 }
或者利用本篇末尾提供的密码机器
0x04 凯撒密码
凯撒密码:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
密文样例:U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJGbRH7YJH7YSH]=93dVZ3^S8$:8"&:9U]RH;g=8Y!U92'=j$KH]ZSj&[S#!gU#*dK9.
解题思路:得知是凯撒加密之后,尝试进行127次轮转爆破:或者利用本篇末尾提供的密码机器;
lstr="""U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJGbRH7YJH7YSH]=93dVZ3^S8$:8"&:9U]RH;g=8Y!U92'=j$KH]ZSj&[S#!gU#*dK9."""
解密脚本:
1 for p in range(127): 2 str1 = '' 3 for i in lstr: 4 temp = chr((ord(i)+p)%127) 5 if 32<ord(temp)<127 : 6 str1 = str1 + temp 7 feel = 1 8 else: 9 feel = 0 10 break 11 if feel == 1: 12 print(str1)
0x05 Unicode
类似于ASCII码的一种编码方式:(详细资料http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html)
密文样例:u5927u5bb6u597duff0cu6211u662fu0040u65e0u6240u4e0du80fdu7684u9b42u5927u4ebauff01u8bddu8bf4u5faeu535au7c89u4e1du8fc7
在线解密:tool.chinaz.com/Tools/Unicode.aspx
0x06 brainfuck
请看我的另一篇关于Barinfuck与Ook!的博文http://www.cnblogs.com/WangAoBo/p/6373318.html
0x07 摩斯密码
就是影视剧中经常见到的那种密码
密文样例:-- --- .-. ... .
在线解密:http://www.jb51.net/tools/morse.htm
在线解密:http://www.zou114.com/mesm/
或者利用本篇末尾提供的密码机器
0x08 jsfuck
类似于brainfuck,也是一种替换密码,由( ) [ ] { } ! + 等符号组成
在线解密:http://utf-8.jp/public/jsfuck.html
在线解密:http://www.jsfuck.com/
在线解密:http://patriciopalladino.com/files/hieroglyphy/
或者直接再Chrome或者FIrefox的控制台中运行即可解码
0x09 培根密码
培根所用的密码是一种本质上用二进制数设计的。不过,他没有用通常的0和1来表示,而是采用a和b。
0x0A 猪圈密码又称共济会密码
也是一种替换密码,替换方式如下:
或者可以表示成:
0x0B CRC32
密文样例:4D1FAE0B
1 import zlib 2 def crc32(st): 3 crc = zlib.crc32(st) 4 if crc > 0: 5 return "%x" % (crc) 6 else: 7 return "%x" % (~crc ^ 0xffffffff)
本文持续更新,密码机器v1.0下载链接:http://pan.baidu.com/s/1hrIvpWS 密码:pdhx