收藏 分销(赏)

CTF中那些脑洞大开的编码和加密.docx

上传人:pc****0 文档编号:5718833 上传时间:2024-11-16 格式:DOCX 页数:67 大小:2.34MB 下载积分:10 金币
下载 相关 举报
CTF中那些脑洞大开的编码和加密.docx_第1页
第1页 / 共67页
CTF中那些脑洞大开的编码和加密.docx_第2页
第2页 / 共67页


点击查看更多>>
资源描述
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.敲击码(Tap code)                 12.莫尔斯电码(Morse Code)                 13.编码的故事         各种文本加密         换位加密:                 1.栅栏密码(Rail-fence Cipher)                 2.曲路密码(Curve Cipher)                 3.列移位密码(Columnar Transposition Cipher)         替换加密:                 1.埃特巴什码(Atbash Cipher)                 2.凯撒密码(Caesar Cipher)                 3.ROT5/13/18/47                 4.简单换位密码(Simple Substitution Cipher)                 5.希尔密码(Hill Cipher)                 6.猪圈密码(Pigpen Cipher)                 7.波利比奥斯方阵密码(Polybius Square Cipher)                 8.夏多密码(曲折加密)                 9.普莱菲尔密码(Playfair Cipher)                 10.维吉尼亚密码(Vigenère Cipher)                 11.自动密钥密码(Autokey Cipher)                 12.博福特密码(Beaufort Cipher)                 13.滚动密钥密码(Running Key Cipher)                 14.Porta密码(Porta Cipher)                 15.同音替换密码(Homophonic Substitution Cipher)                 16.仿射密码(Affine Cipher)                 17.培根密码(Baconian Cipher)                 18.ADFGX和ADFGVX密码(ADFG/VX Cipher)                 19.双密码(Bifid Cipher)                 20.三分密码(Trifid Cipher)                 21.四方密码(Four-Square Cipher)                 22.棋盘密码(Checkerboard Cipher)                 23.跨棋盘密码(Straddle Checkerboard Cipher)                 24.分组摩尔斯替换密码(Fractionated Morse Cipher)                 25.Bazeries密码(Bazeries Cipher)                 26.Digrafid密码(Digrafid Cipher)                 27.格朗普雷密码(Grandpré Cipher)                 28.比尔密码(Beale ciphers)                 29.键盘密码(Keyboard Cipher)         其他有趣的机械密码:                 1.恩尼格玛密码         代码混淆加密:                 1.asp混淆加密                 2.php混淆加密                 3.css/js混淆加密                 4.VBScript.Encode混淆加密                 5.ppencode                 6.rrencode                 7.jjencode/aaencode                 8.JSfuck                 9.jother                 10.brainfuck编程语言         相关工具         参考网站         彩蛋 0x02 正文  常见编码  1.ASCII编码  ASCII编码大致可以分作三部分组成: 第一部分是:ASCII非打印控制字符(参详ASCII码表中0-31); 第二部分是:ASCII打印字符,也就是CTF中常用到的转换; 第三部分是:扩展ASCII打印字符(第一第三部分详见[ASCII码表]( 编码转换示例 源文本:`The quick brown fox jumps over the lazy dog` ASCII编码对应十进制: 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 对应可以转换成二进制,八进制,十六进制等。 2.Base64/32/16编码  base64、base32、base16可以分别编码转化8位字节为6位、5位、4位。16,32,64分别表示用多少个字符来编码,这里我注重介绍base64。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME,在XML中存储复杂数据。 编码原理:Base64编码要求把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式,6位2进制能表示的最大数是2的6次方是64,这也是为什么是64个字符(A-Z,a-z,0-9,+,/这64个编码字符,=号不属于编码字符,而是填充字符)的原因,这样就需要一张映射表,如下: 举个例子(base64): > 源文本:T   h   e >  > 对应ascii码:84 104 101 >  > 8位binary:01010100 01101000 01100101 >  > 6位binary:010101 000110 100001 100101 >  > 高位补0:000010101 00000110 00100001 00100101 >  > 对应ascii码:21   6   33   37 >  > 查表:V  G  h  l 利用Python base64模块,我们分别可以这样加密解密base64 32 16: 3.shellcode编码  源文本:`The quick brown fox jumps over the lazy dog` 编码后: \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\x67 4.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多一个“-” 字符,少一个”/” 字符。 源文本:`The quick brown fox jumps over the lazy dog` 编码后:`hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNkc+` 编码解码[链接]( 6.UUencode编码  UUencode是一种二进制到文字的编码,最早在unix 邮件系统中使用,全称:Unix-to-Unix encoding,UUencode将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用零补齐。三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值。这个数值只会落在0到63之间。然后将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。 源文本:`The quick brown fox jumps over the lazy dog` 编码后:`M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!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。 源文本:`The quick brown fox jumps over the lazy dog` 编码后:     %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-16 16进制表示方式前面加%u。Unescape解码/解密,就是去掉"%u"后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。 源文本:`The` 编码后:`%u0054%u0068%u0065` 10.HTML实体编码  完整编码手册[参考]( 11.敲击码  敲击码(Tap code)是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音来编码而命名,敲击码是基于5×5方格波利比奥斯方阵来实现的,不同点是是用K字母被整合到C中。 敲击码表:           1  2  3  4  5         1 A  B C/K D  E         2 F  G  H  I  J         3 L  M  N  O  P         4 Q  R  S  T  U         5 V  W  X  Y  Z 12.莫尔斯电码  摩尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯在1836年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代码,摩尔斯电码主要由以下5种它的代码组成: 1. 点(.) 2. 划(-) 3. 每个字符间短的停顿(通常用空格表示停顿) 4. 每个词之间中等的停顿(通常用` / `划分) 5. 以及句子之间长的停顿 摩尔斯电码字母和数字对应表:         A  .-     N  -.     .  .-.-.-    +  .-.-.         1  .----         B  -...   O  ---    ,  --..--   _  ..--.-        2  ..---         C  -.-.   P  .--.   :  ---...    $  ...-..-       3  ...--         D  -..    Q  --.-   "  .-..-.   &  .-...         4  ....-         E  .      R  .-.     '  .----.   /  -..-.          5  .....         F  ..-.   S  ...     !  -.-.--                     6  -....         G  --.   T  -       ?  ..--..                     7  --...         H  ....   U  ..-    @  .--.-.                    8  ---..         I  ..      V  ...-    -  -....-                     9  ----.         J  .---   W  .--    ;  -.-.-.                     0  -----         K  -.-    X  -..-   (  -.--.                    L  .-..    Y  -.--   )  -.--.-                   M  --    Z  --..  =  -...-                                               源文本:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG` 编码后:         - .... . / --.- ..- .. -.-. -.- / -... .-. --- .-- -. / ..-. --- -..- / .--- ..- -- .--. ... / --- ...- . .-. / - .... . / .-.. .- --.. -.-- / -.. --- --. 在线编码解码[传送门]( 摩尔斯电码除了能对字母数字编码以外还对一些标点符号,非英语字符进行了编码,而且还有一些特定意义的组合称为特殊符号,比如`·-·-·-·-·-`表达的意思是调用信号,表示“我有消息发送”。如果你感兴趣可以参考[WiKi](https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81)。 13.编码的故事 推荐大家去看[编码的故事]( 各种文本加密  文本加密可以将正常文本内容打乱为不可连读的文字或符号(汉字 数字 字母 音乐符号 国际音标 盲文 韩文 日文 傣文 彝文 箭头符号 花朵符号 俄文),换行等格式信息也会被清除,达到加密的作用。在进行文本加密时可以设定一个密码,这样只有知道密码的人才能解密文本。密码可以是数字、字母和下划线,最多九位。 加密示例: 源文本:`敏捷的棕色狐狸跳过了懒惰的狗` 编码解码[链接]( 换位加密 1.栅栏密码 **(1)介绍** 栅栏密码(Rail-fence Cipher)就是把要加密的明文分成N个一组,然后把每组的第1个字符组合,每组第2个字符组合...每组的第N(最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文,这里以2栏栅栏加密为例。 明文:`The quick brown fox jumps over the lazy dog` 去空格:`Thequickbrownfoxjumpsoverthelazydog` 分组:`Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g` 第一组:`Teucbonojmsvrhlzdg` 第二组:`hqikrwfxupoeteayo` 密文:`Teucbonojmsvrhlzdghqikrwfxupoeteayo` 加解密[传送门]( 2.曲路密码 曲路密码(Curve Cipher)是一种换位密码,需要事先双方约定密钥(也就是曲路路径)。 明文:`The quick brown fox jumps over the lazy dog` 填入5行7列表(事先约定填充的行列数) 加密的回路线(事先约定填充的行列数) 密文:`gesfc inpho dtmwu qoury zejre hbxva lookT` 3.列移位密码 **(1)介绍** 列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。下面我们以明文 The quick brown fox jumps over the lazy dog,密钥 how are u为例: 填入5行7列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充) 密钥:`how are u` 按how are u在字母表中的出现的先后顺序进行编号,我们就有a为1,e为2,h为3,o为4,r为5,u为6,w为7,所以先写出a列,其次e列,以此类推写出的结果便是密文: 密文:`qoury inpho Tkool hbxva uwmtd cfseg erjez` 这里提供一个行列数相等的填充规则列移位密码加解密[链接]( 另外由列移位密码变化来的密码也有其他的,比如[Amsco密码]( Cipher)和[Cadenus密码]( Cipher)。 替换加密  1.埃特巴什码 **(1)介绍** 埃特巴什码(Atbash Cipher)是一种以字母倒序排列作为特殊密钥的替换加密,也就是下面的对应关系:     ABCDEFGHIJKLMNOPQRSTUVWXYZ     ZYXWVUTSRQPONMLKJIHGFEDCBA 明文:`the quick brown fox jumps over the lazy dog` 密文:`gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt` 加解密[传送门]( 2.凯撒密码  **(1)介绍** 凯撒密码(Caesar Cipher或称恺撒加密、恺撒变换、变换加密、位移加密)是一种替换加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推,更多[参考](https://en.wikipedia.org/wiki/Caesar_cipher)。 加密实例: 明文:`The quick brown fox jumps over the lazy dog` 偏移量:1 密文:`Uif rvjdl cspxo gpy kvnqt pwfs uif mbaz eph` 你也可以使用Python的pycipher模块来加解密,如果提示没有这个模块可以通过`pip install pycipher`或者其他方式来安装pycipher模块。 >>> from pycipher import Caesar >>> Caesar(key=1).encipher('The quick brown fox jumps over the lazy dog') 'UIFRVJDLCSPXOGPYKVNQTPWFSUIFMBAZEPH' >>> Caesar(key=1).decipher('UIFRVJDLCSPXOGPYKVNQTPWFSUIFMBAZEPH') 'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG' 参考表(这里是向后移位加密,向前移位解密): 加密解密[链接]( 3.ROT5/13/18/47  **(1)介绍** ROT5/13/18/47是一种简单的码元位置顺序替换暗码。此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取。 > ROT5 是 rotate by 5 places 的简写,意思是旋转5个位置,其它皆同。下面分别说说它们的编码方式: >  > ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。 >  > ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。 >  > ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。 >  > ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码,下面以rot13以例。 明文:`the quick brown fox jumps over the lazy dog` 密文:`gur dhvpx oebja sbk whzcf bire gur ynml qbt` [传送门]( 4.简单替换密码  **(1)介绍** 简单换位密码(Simple Substitution Cipher)加密方式是以每个明文字母被与之唯一对应且不同的字母替换的方式实现的,它不同于恺撒密码,因为密码字母表的字母不是简单的移位,而是完全是混乱的。 比如:     明文字母 : abcdefghijklmnopqrstuvwxyz     明文字母 : phqgiumeaylnofdxjkrcvstzwb 明文:`the quick brown fox jumps over the lazy dog` 密文:`cei jvaql hkdtf udz yvoxr dsik cei npbw gdm` **(2)破解** 当密文数据足够多时这种密码我们可以通过字频分析方法破解或其他方法破解,比较好的在线词频分析网站[ =墙),这里推荐一篇通过"爬山算法"来破解简单替换密码[文章]( 密文:     pmpafxaikkitprdsikcplifhwceigixkirradfeirdgkipgigudkcekiigpwrpucikceiginasikwduearrxiiqepcceindgmieinpwdfprduppcedoikiqiasafmfddfipfgmdafmfdteiki 解密: (ps:score值越小越准确) 密钥:`PHQGIUMEAVLNOFDXBKRCZSTJWY` 明文:     AGAINPIERREWASOVERTAKENBYTHEDEPRESSIONHESODREADEDFORTHREEDAYSAFTERTHEDELIVERYOFHISSPEECHATTHELODGEHELAYONASOFAATHOMERECEIVINGNOONEANDGOINGNOWHERE 将明文转换成可读句子: again pierre was over taken by the depression he so dreaded for three day safter the delivery of his speech at the lodge he lay on a  sofa at home receiving no one and going no where 5.希尔密码  **(1)介绍** 希尔密码(Hill Cipher)是基于线性代数多重代换密码,由Lester S. Hill在1929年发明。每个字母转换成26进制数字:A=0, B=1, C=2...Z=25一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD26。更多[参考](https://en.wikipedia.org/wiki/Hill_cipher) **(2)加密** 明文:`ACT` 明文对应矩阵: 加密密钥:`GYBNQKURP` 加密矩阵: 计算过程: 密文:`FIN` **(3)解密** 密文:`FIN` 计算加密矩阵的逆矩阵: 解密计算: 明文:`ACT` 至于证明和求逆可以参考线性代数知识。 **(4)破解** 密码分析一门破解编码和密码的艺术。当我们尝试去攻破希尔密码你会发现频率分析实际上没有什么用处,特别在密钥长度增多的情况下。对于较长的二元矩阵(2×2的希尔密码)频率分析可能可能会有帮助,但是对于较短的密文分析是没有实际作用的。 这里推荐一篇关于用[已知明文样本攻击的方式破解希尔密码]( 密文:     XUKEXWSLZJUAXUNKIGWFSOZRAWURORKXAOSLHROBXBTKCMUWDVPTFBLMKEFVWMUXTVTWUIDDJVZKBRMCWOIWYDXMLUFPVSHAGSVWUFWORCWUIDUJCNVTTBERTUNOJUZHVTWKORSVRZSVVFSQXOCMUWPYTRLGBMCYPOJCLRIYTVFCCMUWUFPOXCNMCIWMSKPXEDLYIQKDJWIWCJUMVRCJUMVRKXWURKPSEEIWZVXULEIOETOOFWKBIUXPXUGOWLFPWUSCH 解密: 解密[脚本实例]( 在线加解密[传送门]( 6.猪圈密码 **(1)介绍** 猪圈密码(Pigpen Cipher或称九宫格密码、朱高密码、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码。更多[参考](https://en.wikipedia.org/wiki/Pigpen_cipher) 明文字母和对应密文: 明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG` 密文: 在线加密[传送门]( **(2)变种** 圣堂武士密码(Templar Cipher)是共济会的“猪圈密码”的一个变种,一直被共济会圣殿骑士用。 明文字母和对应密文: **(3)其他变种** 明文字母和对应密文: 明文字母和对应密文: 明文字母和对应密文: 7.波利比奥斯方阵密码  **(1)介绍** 波利比奥斯方阵密码(Polybius S
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 行业资料 > 医学/心理学

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服