您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > CTF中那些脑洞大开的编码和加密
CTF中那些脑洞大开的编码和加密0x00前言正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问题:表哥,你知道这是什么加密吗?其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙伴做题时给一些参考,当然常在CTF里出现的编码也可以了解一下。本来是想尽快写出参考的文章,无奈期间被各种事情耽搁导致文章断断续续写了2个月,文章肯定有许多没有提及到,欢迎小伙伴补充,总之,希望对小伙伴们有帮助吧!最后欢迎小伙伴来[博客]()玩耍: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码表]()解释)。编码转换示例源文本:`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码:841041018位binary:0101010001101000011001016位binary:010101000110100001100101高位补0:000010101000001100010000100100101对应ascii码:2163337查表:VGhl利用Pythonbase64模块,我们分别可以这样加密解密base643216:3.shellcode编码源文本:`Thequickbrownfoxjumpsoverthelazydog`编码后:\x54\x68\x65\x7f\x71\x75\x69\x63\x6b\x7f\x62\x72\x6f\x77\x6e\x7f\x66\x6f\x78\x7f\x6a\x75\x6d\x70\x73\x7f\x6f\x76\x65\x72\x7f\x74\x68\x65\x7f\x6c\x61\x7a\x79\x7f\x64\x6f\x674.Quoted-printable编码它是多用途互联网邮件扩展(MIME)一种实现方式。有时候我们可以邮件头里面能够看到这样的编码,编码原理[参考]()。源文本:`敏捷的棕色狐狸跳过了懒惰的狗`编码后:=E6=95=8F=E6=8D=B7=E7=9A=84=E6=A3=95=E8=89=B2=E7=8B=90=E7=8B=B8=E8=B7=B3=E8=BF=87=E4=BA=86=E6=87=92=E6=83=B0=E7=9A=84=E7=8B=97编码解码[链接]()5.XXencode编码XXencode将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间。以所对应值的位置字符代替。它所选择的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符。跟base64打印字符相比,就是UUencode多一个“-”字符,少一个”/”字符。源文本:`Thequickbrownfoxjumpsoverthelazydog`编码后:`hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNkc+`编码解码[链接]()6.UUencode编码UUencode是一种二进制到文字的编码,最早在unix邮件系统中使用,全称:Unix-to-Unixencoding,UUencode将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用零补齐。三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值。这个数值只会落在0到63之间。然后将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。源文本:`Thequickbrownfoxjumpsoverthelazydog`编码后:`M5&AE('%U:6-K(&)R;W=N(&9O!J=6UPR!O=F5R('1H92!L87IY(&1O9PH*`编码解码[链接]()7.URL编码url编码又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有encodeURI、encodeURIComponent,PHP有urlencode、urldecode等。编码方法很简单,在该字节ascii码的的16进制字符前面加%.如空格字符,ascii码是32,对应16进制是'20',那么urlencode编码结果是:%20。源文本:`Thequickbrownfoxjumpsoverthelazydog`编码后:%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编码解码[链接]()8.Unicode编码Unicode编码有以下四种编码方式:源文本:`The`&x[Hex]:`&x0054;&x0068;&x0065;`&[Decimal]:`&00084;&00104;&00101;`\U[Hex]:`\U0054\U0068\U0065`\U+[Hex]:`\U+0054\U+0068\U+0065`编码解码[链接]()9.Escape/Unescape编码Escape/Unescape加密解码/编码解码,又叫%u编码,采用UTF-16BE模式,Escape编码/加密,就是字符对应UTF-1616进制表示方式前面加%u。Unescape解码/解密,就是去掉%u后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。源文本:`The`编码后:`%u0054%u0068%u0065`10.HTML实体编码完整编码手册[参考]()11.敲击码敲击码(Tapcode)是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音来编码而命名,敲击码是基于5×5方格波利比奥斯方阵来实现的,不同点是是用K字母被整合到C中。敲击码表:123451ABC/KDE2FGHIJ3LMNOP4QRSTU5VWXYZ12.莫尔斯电码摩尔斯电码(MorseCode)是由美国人萨缪尔·摩尔
本文标题:CTF中那些脑洞大开的编码和加密
链接地址:https://www.777doc.com/doc-7636932 .html