扫码领资料
获网安教程
免费&进群
常见编码
-
ASCII编码
ASCII(美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,是网站站长和程员不可少的学…
1
2
3
4ASCII编码大致可以分作三部分组成:
第一部分是:ASCII非打印控制字符(参详ASCII码表中0-31);
第二部分是:ASCII打印字符,也就是CTF中常用到的转换;
第三部分是:扩展ASCII打印字符(第一第三部分详见 ASCII码表 解释)。BASHASCII码表:http://www.asciima.com/
-
Unicode编码
Unicode 是由于传统的字符编码方式的局限性而产生的,例如 ISO 8859 所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不相容的情况。很多传统的编码方式都具有一个共通的问题,即其容许电脑进行双语环境式的处理(通常使用拉丁字母以及其本地语言),但却无法同时支援多语言环境式的处理(指可同时处理混合多种语言的情况)。
1
2
3
4
5
6
7
8
9
10
11
12Unicode编码有以下四种编码方式:
源文本:The
&#x [Hex]:The
&# [Decimal]:The
U [Hex]:U0054U0068U0065
U+ [Hex]:U+0054U+0068U+0065BASH编码解码 http://www.mxcz.net/tools/Unicode.aspx
-
URL编码
url编码又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。
现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有encodeURI、encodeURIComponent,PHP有 urlencode、urldecode等。
1
2
3
4
5
6
7编码方法很简单,在该字节ascii码的的16进制字符前面加%. 如 空格字符,ascii码是32,对应16进制是'20',那么urlencode编码结果是:%20。
实例:
i love you
转化后结果
%69%20%6c%6f%76%65%20%79%6f%75
其实就是ascii转16进制,然后替换0x为%BASH -
UUencode编码/XXencode编码
UUencode是一种二进制到文字的编码,最早在unix 邮件系统中使用,全称:Unix-to-Unix encoding,UUencode将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用零补齐。
1
2
3
4
5
6三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值。这个数值只会落在0到63之间。然后将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。
实例:
i love you
转码后的结果:
+:2!L;W9E('EO=2``BASHXXencode编码和UUencode类似
网站:http://web.chacuo.net/charsetuuencode
-
Escape/Unescape编码
Escape/Unescape加密解码/编码解码,又叫%u编码,采用UTF-16BE模式, Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u。
1
2
3
4
5
6Unescape解码/解密,就是去掉"%u"后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。
实例:
The
转化后的结果:
%u0054%u0068%u0065BASH -
hex编码
1
2
3
4
5
6
7
8由每个字符的ascii编码的数值,直接转换成16进制数
例如:
i love you
转换后的结果:
0x69206c6f766520796f75
所以,这就有一个很明显的特点:
数值的长度为2的倍数BASH -
Base64/32/16编码
base64、base32、base16可以分别编码转化8位字节为6位、5位、4位。
编码原理:Base64编码要求把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式,6位2进制能表示的最大数是2的6次方是64,这也是为什么是64个字符(A-Z,a-z,0-9,+,/这64个编码字符,=号不属于编码字符,而是填充字符)的原因,这样就需要一张映射表,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15原理实例解析:
源文本: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 lBASHhttp://www.mxcz.net/tools/base64.aspx
本地工具:cyberchef
python:base64库
-
莫斯电码(Morse Code)
摩尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯在1836年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代码,摩尔斯电码主要由以下5种它的代码组成:
1
2
3
4
5
6
7
8
9
10
11
12
13
14#对照表
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 --.. = -...-BASH解码工具:
http://www.all-tool.cn/Tools/morse/?&rand=45de1f567d23d8bd0bbabaf8f10d1acc
本地工具:cyberchef
-
点(.)
-
划(-)
-
每个字符间短的停顿(通常用空格表示停顿)
-
每个词之间中等的停顿(通常用
/
划分) -
以及句子之间长的停顿
-
盲文编码
盲文又称点字。国际通用的点字由6个(2*3,两列三行)凸起的远点为基本结构组成,是专供盲人摸读书写的文字符号。由法国盲人路易布莱尔(Louls Braille)在1829发明。
盲文的结构:以左上为起始点,记作1,按从上到下,从左到右依次递增的原则计数。所以
1
2
3左上 1 · · 4 右上
左中 2 · · 5 右中
左下 3 · · 6 右下BASHhttps://www.dcode.fr/braille-alphabet
盲文包括数字,字母(字母+常见符号),拼音
-
byte_to_long
1
2
3
4
5
6
7
8byte:字节,本质是ascii编码,ascii分为可打印和不可打印部分。而byte将不可打印的部分ascii码的值转成了16进制,用'x'替换了'0x'
long:长整型,是一个整数,这个常用在数值运算上。
常见的加密算法都是基于数字运算的。比如非对称加密的rsa,对称加密的des、aes,所以在加密之前都必不可少的将byte数据流转换成long数据。
即长度为n的字节串,从最低位向最高位每挪动一位,乘数倍增2^8,因为一个字节是8位bits
byte_to_long 与hex编码不同,hex只是单纯的将字符对应的ascii码转换成16进制值。BASH
换位加密
-
栅栏密码(Rail-fence Cipher)
首先把加密的明文分成N个一组,然后把每组的第1、第2、第M个字符连起来,形成无规律的密文字符串。
1
2
3
4
5
6
7
8
9
10
11
12例如字符串“123456789abc”,首先将字符串分成3组,如下排列:
1234
5678
9abc
依次取每一组字符,组成加密后密文:"15926a37b48c"。
1 2 3 4
5 6 7 8
9 a b c
1 5 9
2 4 6 8 a c
3 7 bBASH栅栏变种——w型:
采用先把明文类似”W”形状进行排列,然后再按栏目顺序1-N,取每一栏的所有字符值,组成加密后密文。
1
2
3
4
5比如字符串“123456789”,采用栏目数为3的时,明文将采用如下排列:
1---5---9
-2-4-6-8-
--3----7--
取每一栏所有字符串,组成加密后密文:“159246837”。BASH
指定路径型
1 |
|
解密工具:
http://www.metools.info/code/fence154.html
本地工具:
cyberchef
曲路密码(Curve Cipher)
曲路密码是一种置换密码,其中密钥是从明文创建的块中读取密文时要遵循的路径,该密钥需双方事先约定好
列移位密码(Columnar Transposition Cipher)
将明文填入 5 行 7 列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充)
密钥:按 how are u
在字母表中的出现的先后顺序进行编号,我们就有 a 为 1,e 为 2,h 为 3,o 为 4,r 为 5,u 为 6,w 为 7,所以先写出 a 列,其次 e 列,
解码工具:
http://www.hiencode.com/colum.html
替换加密
-
凯撒密码(Caesar Cipher)
凯撒密码(Caesar Cipher或称恺撒加密、恺撒变换、变换加密、位移加密)是一种替换加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推
1
2
3
4
5
6
7实例:
iloveyou => 偏移量3
加密结果:
loryhbrx
再a-z字母范文内编码:97-122
全范围:0-255BASH凯撒变种
1
2
3
4
5
6
7
8
9
10
11
12
131,转ascii,偏移ascii码,再将偏移后的ascii转字符
2,3,4,5,
a = 'iloveyou'
len(a) =8
a[0] = i
0-7
for i in range(len(a)):
print(chr(ord(a[i])+i))
flag
345
gpBASH每次编码之后,偏移量发生变化。
-
ROT5/13/18/47
ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。
1
2
3
4例题:
123456
ROT5结果:
678901BASHROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。
1
2
3
4例题:
i love you
ROT13结果:
v ybir lbhBASHROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。
1
2
3
4例题
i love you 1314
ROT 18结果:
v ybir lbh 6869BASHROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码,下面以rot13以例。
1
2
3
4例题
i love you !!1314
ROT 47结果:
: =@G6 J@F !!`b`cBASH -
希尔密码(Hill Cipher)
希尔密码(Hill Cipher)是基于线性代数多重代换密码,由Lester S. Hill在1929年发明。每个字母转换成26进制数字:A=0, B=1, C=2…Z=25一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD26。
其中,明文,密文都是正整数,所以密钥矩阵K,及其逆矩阵 K‘ 都应该为正整数
1
hill对照表
BASH1
2
3
4
5
6
7
8
9
10
11
12
13
14
15加密过程:
明文:ACT
0
2
19
加密密钥:GYBNQKURP
6 24 1
13 16 10
20 17 15
计算过程
6 24 1 0 67 15 => P
13 16 10 2 222 mod 26 14 =>
20 17 15 19 319 7 =>BASH解密过程:
1
2
3解密过程:
密文:poh
计算加密矩阵的逆矩阵:BASH1
解密密文:
BASH解密工具:
http://www.atoolbox.net/Tool.php?Id=914
解密脚本:hillx.py
-
计算逆矩阵
伴随矩阵求逆矩阵
逆矩阵 = 伴随矩阵 / 行列式
伴随矩阵
行列式
-
猪圈密码(Pigpen Cipher)
猪圈密码(Pigpen Cipher或称九宫格密码、朱高密码、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码。
对照表:
变种一:
变种二:
变种三:
变种四:
-
维吉尼亚密码(Vigenère Cipher)
维吉尼亚密码(Vigenère Cipher)是在单一恺撒密码的基础上扩展出多表代换密码,根据密钥(当密钥长度小于明文长度时可以循环使用)来决定用哪一行的密表来进行替换,以此来对抗字频统计。
-
1
2
3
4
5明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密钥(循环使用,密钥越长相对破解难度越大):CULTURE
加密过程:如果第一行为明文字母,第一列为密钥字母,那么明文字母'T'列和密钥字母'C'行的交点就是密文字母'V',以此类推。
密文:VBP JOZGM VCHQE JQR UNGGW QPPK NYI NUKR XFKBASH在线工具:
https://www.qqxiuzi.cn/bianma/weijiniyamima.php
本地:python
1
2
3
4
5
6
7
8
9
10#!python
# pip install pycipher
from pycipher import Vigenere
Vigenere('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'
Vigenere('CULTURE').decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'PYTHONcyberchef解密(vigenère)
-
培根密码(Baconian Cipher)
培根密码(Baconian Cipher)是一种替换密码,每个明文字母被一个由5字符组成的序列替换,最初的加密方式就是由’A’和’B’组成序列替换明文(所以你当然也可以用别的字母),比如字母’D’替换成”aaabb”,以下是全部的对应关系(另一种对于关系是每个字母都有唯一对应序列,I和J与U/V各自都有不同对应序列):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#!shell
A = aaaaa I/J = abaaa R = baaaa
B = aaaab K = abaab S = baaab
C = aaaba L = ababa T = baaba
D = aaabb M = ababb U/V = baabb
E = aabaa N = abbaa W = babaa
F = aabab O = abbab X = babab
G = aabba P = abbba Y = babba
H = aabbb Q = abbbb Z = babbbBASH加解密:
1
2明文:T H E F O X
密文:baaba aabbb aabaa aabab abbab bababBASH在线工具:
https://rumkin.com/tools/cipher/baconian/
本地:cyberchef
-
键盘密码(Keyboard Cipher)
一般用到的键盘密码就是手机键盘和电脑键盘两种
1
zsdc tghu76
BASH
代码混淆加密:
-
jjencode/aaencode
jjencode将JS代码转换成只有符号的字符串
jjencode/aaencode的解密直接在浏览器的控制台里输入密文即可执行解密
在线工具
https://github.com/jacobsoo/Decoder-JJEncode
https://utf-8.jp/public/jjencode.html
-
JSfuck
JSFuck 可以让你只用 6 个字符
[ ]( ) ! +
来编写 JavaScript 程序。在线工具:
http://www.jsfuck.com/
-
brainfuck编程语言
Brainfuck是一种极小化的计算机语言,按照”Turing complete(完整图灵机)”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的操作都由这八种符号(
> < + - . , [ ]
)的组合来完成。在线工具:
https://www.splitbrain.org/services/ook
来源:http://example.com/2022/07/22/ctf/test/
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
学习更多渗透技能!体验靶场实战练习
(hack视频资料及工具)
(部分展示)
往期推荐
原文始发于微信公众号(白帽子左一):CTF常见编码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论