CTF中那些脑洞大开的编码和加密0x00前言正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问题:表哥,你知道这是什么加密吗?其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙伴做题时给一些参考,当然常在CTF里出现的编码也可以了解一下。本来是想尽快写出参考的文章,无奈期间被各种事情耽搁导致文章断断续续写了2个月,文章肯定有许多没有提及到,欢迎小伙伴补充,总之,希望对小伙伴们有帮助吧!最后欢迎小伙伴来[博客](https://www.hackfun.org/)玩耍:P(ps:由于写文章是用markdown,而论坛编辑器不支持markdown语法,虽然我已经尽力去调整对其字符,可是效果还是不尽人意,如果影响阅读理解可以去博客阅读:P)0x01目录常见编码:1.ASCII编码2.Base64/32/16编码3.shellcode编码4.Quoted-printable编码5.XXencode编码6.UUencode编码7.URL编码8.Unicode编码9.Escape/Unescape编码10.HTML实体编码11.敲击码(Tapcode)12.莫尔斯电码(MorseCode)13.编码的故事各种文本加密换位加密:1.栅栏密码(Rail-fenceCipher)2.曲路密码(CurveCipher)3.列移位密码(ColumnarTranspositionCipher)替换加密:1.埃特巴什码(AtbashCipher)2.凯撒密码(CaesarCipher)3.ROT5/13/18/474.简单换位密码(SimpleSubstitutionCipher)5.希尔密码(HillCipher)6.猪圈密码(PigpenCipher)7.波利比奥斯方阵密码(PolybiusSquareCipher)8.夏多密码(曲折加密)9.普莱菲尔密码(PlayfairCipher)10.维吉尼亚密码(VigenèreCipher)11.自动密钥密码(AutokeyCipher)12.博福特密码(BeaufortCipher)13.滚动密钥密码(RunningKeyCipher)14.Porta密码(PortaCipher)15.同音替换密码(HomophonicSubstitutionCipher)16.仿射密码(AffineCipher)17.培根密码(BaconianCipher)18.ADFGX和ADFGVX密码(ADFG/VXCipher)19.双密码(BifidCipher)20.三分密码(TrifidCipher)21.四方密码(Four-SquareCipher)22.棋盘密码(CheckerboardCipher)23.跨棋盘密码(StraddleCheckerboardCipher)24.分组摩尔斯替换密码(FractionatedMorseCipher)25.Bazeries密码(BazeriesCipher)26.Digrafid密码(DigrafidCipher)27.格朗普雷密码(GrandpréCipher)28.比尔密码(Bealeciphers)29.键盘密码(KeyboardCipher)其他有趣的机械密码:1.恩尼格玛密码代码混淆加密:1.asp混淆加密2.php混淆加密3.css/js混淆加密4.VBScript.Encode混淆加密5.ppencode6.rrencode7.jjencode/aaencode8.JSfuck9.jother10.brainfuck编程语言相关工具参考网站彩蛋0x02正文常见编码1.ASCII编码ASCII编码大致可以分作三部分组成:第一部分是:ASCII非打印控制字符(参详ASCII码表中0-31);第二部分是:ASCII打印字符,也就是CTF中常用到的转换;第三部分是:扩展ASCII打印字符(第一第三部分详见[ASCII码表](http://www.asciima.com/)解释)。编码转换示例源文本:`Thequickbrownfoxjumpsoverthelazydog`ASCII编码对应十进制:841041013211311710599107329811411111911032102111120321061171091121153211111810111432116104101321089712212132100111103对应可以转换成二进制,八进制,十六进制等。2.Base64/32/16编码base64、base32、base16可以分别编码转化8位字节为6位、5位、4位。16,32,64分别表示用多少个字符来编码,这里我注重介绍base64。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,emailviaMIME,在XML中存储复杂数据。编码原理:Base64编码要求把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式,6位2进制能表示的最大数是2的6次方是64,这也是为什么是64个字符(A-Z,a-z,0-9,+,/这64个编码字符,=号不属于编码字符,而是填充字符)的原因,这样就需要一张映射表,如下:举个例子(base64):>源文本:The>>对应ascii码:84104101>>8位binary:010101000110100001100101>>6位binary:010101000110100001100101>>高位补0:000010101000001100010000100100101>>对应ascii码:2163337>>查表:VGhl利用Pythonb...