我们在刚开始做CTF的crypto的题目时,常会不知道给出的加密后的字符串那种加密方式加密的,因此无法做题,会一个一个的去试,因此这篇文章总结一些常见的加密字符串的特征,供大家查阅。

Jother编码

它是一种运用于Javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编码方式,其中少量字符包括”[“,”]”,”{“,”}”,”(“,”)”,”!”,”+”。

例子:

1
[][(![]+[])[!![]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!![]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}[[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+({}[[]]+[])[+[]]+({}+[])[!![]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+({}[[]]+[])[+[]]+(!![]+[])[+!![]]+({}[[]]+[])[+!![]]+({}+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!![]+!![]]+({}+[])[+!![]]+({}+[])[!![]+!![]+!![]+!![]+!![]]+(![]+[])[+!![]]+(!![]+[])[+[]]+({}[[]]+[])[!![]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}[[]]+[])[+!![]])()

这种题目通常直接将内荣复制到浏览器的console中运行即可得到flag。

ASCII编码

常是用字符所对应的ASCII编码的十进制表示字符,若遇到连续的一堆分割的10进制数不妨通过脚本将十进制对应的字符表示出来。

例子

1
2
3
84 104 101 32 113 117 105 99 107 32 98
114 111 119 110 32 102 111 120 32 106 117 109 112 115 32 111 118 101 114 32 116
104 101 32 108 97 122 121 32 100 111 103

解密脚本

1
2
3
4
5
6
7
8
9
o_str = '84 104 101 32 113 117 105 99 107 32 98 114 111 119 110 32 102 111 120 32 106 117 109 112 115 32 111 118 101 114 32 116 104 101 32 108 97 122 121 32 100 111 103'
o_str = o_str.split(' ')
d_str = ''
for i in o_str:
d_str += chr(int(i))


print(d_str)

Base32/64/58编码

base32的编码表是由(A-Z、2-7)32个可见字符构成,“=”符号用作后缀填充。
base64的编码表是由(A-Z、a-z、0-9、+、/)64个可见字符构成,“=”符号用作后缀填充。
base58的编码表相比base64少了数字0,大写字母I,O,小写字母 l (这个是L),以及符号‘+’和‘/’

base系列的编码,通常特征值都是在一堆大小写字母和数字后加1-2个等号,若无等号,只存在字母和数字,也可能是base编码,通常是base64。

例子:

1
2
原文:you are so handsome
base64编码:eW91IGFyZSBzbyBoYW5kc29tZQ==

rot5/13/18/47

ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,
ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,
ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,将其命名为ROT18。
ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,用于ROT47编码的字符其ASCII值范围是33-126。

UUencode/XXencode

这两种编码和base64都比较相似。

UUencode

1
2
原文:you are so handsome
UUencode编码:3>6]U(&%R92!S;R!H86YD<V]M90``

特征:有很多的特殊字符看见。

XXencode

1
2
原文:you are so handsome
XXencode编码:HSKxp643mNG-nPm-cMKtYQqxhNE++

特征:同base64特别相近。

栅栏密码

通常这种题目会在题目描述的时候提示你是栅栏加密的。当提示我们是栅栏后,我们可以在在线的解密网站一个一个的尝试,然后其中有意义的一组就是我们的flag。

例子

1
2
密文:felhaagv{ewtehtehfilnakgw}
当每组字数为2时,解出:flag{wethinkwehavetheflag}

MD5加密

这种题目也是,题目描述中会给出,然后直接在线网站破解就行。

URL编码

URL编码后的格式是%xx,是该字符对应的ascii码的十六进制表示的前面加%。例如:

1
%54%68%65%20%71%75%69%63%6b%20%62%72%6f%77%6e%20%66%6f%78%20%6a%75%6d%70%73%20%6f%76%65%72%20%74%68%65%20%6c%61%7a%79%20%64%6f%67

摩尔斯电码

摩尔斯电码主要是由. - 组成,每一个字符之间通常用空格来表示,如

1
2
.-.- ... .- ..- -.- -. . --. -.-- -. . -- ... .- --- ..--.. --.- -.-- -. ..- ...--- -.... .- ---. -.... ----- -.... .--- -.-- ---.. .
. ---.. ----- ----- ----. ..- ---..

通常还可能用A代替.,用B代替-

这种也是直接在网上找在线的破解工具就可以。

凯撒密码

凯撒密码是一种古典加密方式,是替换加密,通常明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

这种题目,一般题目中也是有提示的,告诉你加密方式和偏移量,然后写脚本得到flag就好。

与佛论禅

特征:

1
佛曰:謹蘇那梵即俱薩怯密摩梵耶瑟帝奢諦侄即離盡諳豆栗諳佛實俱老訶漫得曳羯皤曳缽是梵菩提明怯盧切佛舍心怯世怯怛皤世智呐礙盡咒缽有蒙奢耨苦他奢槃密娑耶梵麼奢般者故皤能俱怖呼梵娑多都滅世缽提亦

遇到这样的,直接在线解密去吧。

培根加密

看到一串的A和B,并且五个一组,那么就是培根加密,直接在线解密。

当铺密码

当铺密码是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几。
“羊由大井夫大人王中工”对应的数字为“9158753624”。

rabbit

题目提示是rabbit加密,可以直接通过网站解密。

在线加解密网站

最后,粘一些在线加解密的网站。