CTF中那些脑洞大开的编码和加密
原文:
http://www.tuicool.com/articles/2E3INnm
http://www.secbox.cn/hacker/ctf/8078.html
0x01 目录
-
常见编码:
- ASCII编码
- Base64/32/16编码
- shellcode编码
- Quoted-printable编码
- XXencode编码
- UUencode编码
- URL编码
- Unicode编码
- Escape/Unescape编码
- HTML实体编码
- 敲击码(Tap code)
- 莫尔斯电码(Morse Code)
- 编码的故事
-
各种文本加密
-
换位加密:
- 栅栏密码(Rail-fence Cipher)
- 曲路密码(Curve Cipher)
- 列移位密码(Columnar Transposition Cipher)
-
替换加密:
- 埃特巴什码(Atbash Cipher)
- 凯撒密码(Caesar Cipher)
- ROT5/13/18/47
- 简单换位密码(Simple Substitution Cipher)
- 希尔密码(Hill Cipher)
- 猪圈密码(Pigpen Cipher)
- 波利比奥斯方阵密码(Polybius Square Cipher)
- 夏多密码(曲折加密)
- 普莱菲尔密码(Playfair Cipher)
- 维吉尼亚密码(Vigenère Cipher)
- 自动密钥密码(Autokey Cipher)
- 博福特密码(Beaufort Cipher)
- 滚动密钥密码(Running Key Cipher)
- Porta密码(Porta Cipher)
- 同音替换密码(Homophonic Substitution Cipher)
- 仿射密码(Affine Cipher)
- 培根密码(Baconian Cipher)
- ADFGX和ADFGVX密码(ADFG/VX Cipher)
- 双密码(Bifid Cipher)
- 三分密码(Trifid Cipher)
- 四方密码(Four-Square Cipher)
- 棋盘密码(Checkerboard Cipher)
- 跨棋盘密码(Straddle Checkerboard Cipher)
- 分组摩尔斯替换密码(Fractionated Morse Cipher)
- Bazeries密码(Bazeries Cipher)
- Digrafid密码(Digrafid Cipher)
- 格朗普雷密码(Grandpré Cipher)
- 比尔密码(Beale ciphers)
- 键盘密码(Keyboard Cipher)
-
其他有趣的机械密码:
- 恩尼格玛密码
-
代码混淆加密:
- asp混淆加密
- php混淆加密
- css/js混淆加密
- VBScript.Encode混淆加密
- ppencode
- rrencode
- jjencode/aaencode
- JSfuck
- jother
- brainfuck编程语言
-
相关工具
-
参考网站
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在线编解码
当然还有base32和base16加密,base64全家桶可以用python里的base64模块来搞定。
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
char s[]= "tn c0afsiwal kes,hwit1r g,npt ttessfu}ua u hmqik e {m, n huiouosarwCniibecesnren.";
char t[86]= "";
int i,j,k;
k=0;
for (i=0;i<17;i++)
{
for(j=0;j<5;j++)
{
t[k++]= ch[j*17+i];
}
}
for(i=0;i<85;i++)
{
printf("%c",t[i]);
}
|
0x04 凯撒密码
凯撒密码:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
密文样例:
解题思路:得知是凯撒加密之后,尝试进行127次轮转爆破:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
lstr="""U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJG*bRH7YJH7YSH]*=93dVZ3^S8*$:8"&:9U]RH;g=8Y!U92'=j*$KH]ZSj&[S#!gU#*dK9\."""</p>
for p in range(127): str1 = '' for i in lstr: temp = chr((ord(i)+p)%127) if 32<ord(temp)<127 : str1 = str1 + temp feel = 1 else: feel = 0 break if feel == 1: print(str1) |
更多请参考原文链接
0x05 维吉利亚加密
凯撒密码的升级,更多详见百度百科
0x06 Unicode
密文样例:
0x07 brainfuck
类型:
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.
利用BFVM.exe直接解密
用法 loadtxt 1.txt
0x08 摩斯密码
密文样例:-- --- .-. ... .
0x09 jsfuck or jother
密文样例: