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

0x00 前言

正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问题:表哥,你知道这是什么加密吗?其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙伴做题时给一些参考,当然常在CTF里出现的编码也可以了解一下。本来是想尽快写出参考的文章,无奈期间被各种事情耽搁导致文章断断续续写了2个月,文章肯定有许多没有提及到,欢迎小伙伴补充,总之,希望对小伙伴们有帮助吧!

0x01 目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
常见编码:
     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.jpg

第三部分是:扩展ASCII打印字符(第一第三部分详见ASCII码表解释)。

编码转换示例

源文本:The quick brown fox jumps over the lazy dog

小葵.png

ASCII编码对应十进制:

1
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字母表.png

举个例子(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:

python加解base64.png


3.shellcode编码

源文本:The quick brown fox jumps over the lazy dog

编码后:

1
\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

shellcode.png


4.Quoted-printable 编码

它是多用途互联网邮件扩展(MIME) 一种实现方式。有时候我们可以邮件头里面能够看到这样的编码,编码原理参考
Quoted-printable 编码.png
源文本:敏捷的棕色狐狸跳过了懒惰的狗

编码后:

1
2
=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多一个“-” 字符,少一个”/” 字符。
XXencode.png

源文本: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

编码后:

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

编码解码链接


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实体编码

html实体编码.png

完整编码手册参考


11.敲击码

敲击码(Tap code)是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音来编码而命名,敲击码是基于5×5方格波利比奥斯方阵来实现的,不同点是是用K字母被整合到C中。

敲击码表:

1
2
3
  • 11
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 CTF 比赛,常见的几种编码包括: 1. base64:这是一种用 64 个字符来表示二进制数据的编码方式。 2. hex:这是一种将二进制数据表示为十六进制的编码方式。 3. ASCII:这是一种将数字、字母和其他字符表示为二进制数的编码方式。 4. url-encoding:这是一种用于将特殊字符编码为 %HH 的编码方式,用于在 URL 传输数据。 5. ROT13:这是一种将字母表的字母移动 13 位的编码方式,常用来作为简单的隐写术。 6. morse code: 这是一种用电信号表示字符和数字的编码方式 7. RSA,AES这是常见的加密算法 这只是一个简单的列表,实际上还有许多其他编码加密方式可能会在 CTF 比赛使用。 ### 回答2: CTF(Capture The Flag)是一种网络安全竞赛,参赛者需要解决各种密码学、网络安全等相关问题。在CTF比赛,常见的几种编码方式主要包括以下几种: 1. Base64编码:Base64是一种常见的编码方式,将二进制数据转换为可打印字符。它使用64个字符(A-Z、a-z、0-9、+、/)来表示二进制数据的6个比特位,通常用于在网络传输传递二进制数据。 2. ASCII编码:ASCII(American Standard Code for Information Interchange)是一种常见的字符编码标准,使用7位二进制数表示128个字符,包括数字、字母、标点符号等。 3. Hex编码:Hex(十六进制)编码将数据转换为16进制表示。每个16进制数字对应于4个二进制位,常用于表示二进制数据。 4. URL编码:URL编码是一种用于在URL传递参数的编码方式。它将非字母、数字字符转换为%xx的形式,其xx表示字符的ASCII码的十六进制值。 5. Morse编码:莫尔斯电码是一种在电报通信使用的编码方式。它使用不同长度的信号(点或划)表示字母、数字和标点符号。 6. RSA编码:RSA(由Rivest、Shamir和Adleman三位发明者的姓氏命名)是一种常用的非对称加密算法。RSA编码用于加密和解密数据,其公钥用于加密数据,私钥用于解密数据。 以上是CTF比赛常见的几种编码方式,参赛者需根据具体情况,解密或编码相关数据以解答题目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值