1、常见编码
ASCII编码
ASCII值(10) | ASCII值(16) | 控制字符 | ASCII值(10) | ASCII值(16) | 控制字符 | ASCII值(10) | ASCII值(16) | 控制字符 | ASCII值(10) | ASCII值(16) | 控制字符 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | NUT | 32 | 20 | (space) | 64 | 40 | @ | 96 | 60 | 、 |
1 | 1 | SOH | 33 | 21 | ! | 65 | 41 | A | 97 | 61 | a |
2 | 2 | STX | 34 | 22 | “ | 66 | 42 | B | 98 | 62 | b |
3 | 3 | ETX | 35 | 23 | # | 67 | 43 | C | 99 | 63 | c |
4 | 4 | EOT | 36 | 24 | $ | 68 | 44 | D | 100 | 64 | d |
5 | 5 | ENQ | 37 | 25 | % | 69 | 45 | E | 101 | 65 | e |
6 | 6 | ACK | 38 | 26 | & | 70 | 46 | F | 102 | 66 | f |
7 | 7 | BEL | 39 | 27 | , | 71 | 47 | G | 103 | 67 | g |
8 | 8 | BS | 40 | 28 | ( | 72 | 48 | H | 104 | 68 | h |
9 | 9 | HT | 41 | 29 | ) | 73 | 49 | I | 105 | 69 | i |
10 | A | LF | 42 | 2A | * | 74 | 4A | J | 106 | 6A | j |
11 | B | VT | 43 | 2B | + | 75 | 4B | K | 107 | 6B | k |
12 | C | FF | 44 | 2C | , | 76 | 4C | L | 108 | 6C | l |
13 | D | CR | 45 | 2D | - | 77 | 4D | M | 109 | 6D | m |
14 | E | SO | 46 | 2E | . | 78 | 4E | N | 110 | 6E | n |
15 | F | SI | 47 | 2F | / | 79 | 4F | O | 111 | 6F | o |
16 | 10 | DLE | 48 | 30 | 0 | 80 | 50 | P | 112 | 70 | p |
17 | 11 | DCI | 49 | 31 | 1 | 81 | 51 | Q | 113 | 71 | q |
18 | 12 | DC2 | 50 | 32 | 2 | 82 | 52 | R | 114 | 72 | r |
19 | 13 | DC3 | 51 | 33 | 3 | 83 | 53 | S | 115 | 73 | s |
20 | 14 | DC4 | 52 | 34 | 4 | 84 | 54 | T | 116 | 74 | t |
21 | 15 | NAK | 53 | 35 | 5 | 85 | 55 | U | 117 | 75 | u |
22 | 16 | SYN | 54 | 36 | 6 | 86 | 56 | V | 118 | 76 | v |
23 | 17 | TB | 55 | 37 | 7 | 87 | 57 | W | 119 | 77 | w |
24 | 18 | CAN | 56 | 38 | 8 | 88 | 58 | X | 120 | 78 | x |
25 | 19 | EM | 57 | 39 | 9 | 89 | 59 | Y | 121 | 79 | y |
26 | 1A | SUB | 58 | 3A | : | 90 | 5A | Z | 122 | 7A | z |
27 | 1B | ESC | 59 | 3B | ; | 91 | 5B | [ | 123 | 7B | { |
28 | 1C | FS | 60 | 3C | < | 92 | 5C | / | 124 | 7C | | |
29 | 1D | GS | 61 | 3D | = | 93 | 5D | ] | 125 | 7D | } |
30 | 1E | RS | 62 | 3E | > | 94 | 5E | ^ | 126 | 7E | ` |
31 | 1F | US | 63 | 3F | ? | 95 | 5F | _ | 127 | 7F | DEL |
还有扩展字符。ASCII码一共从0~255个字符。
Base64编码
简述: 将任意字节数据 通过Base64编码 生成可见的字符串(A-Z,a-z,0-9,+,/)。
算法:
- 将非二进制数据转换为二进制数据
- 按 6bit 为一组划分
- 将 6bit 扩展成 8bit
- 对照Base64编码索引表 得出编码后的 可见字符串
- 若出现最后一组不足 8bit 则补0。每补 2bit 个 0 则在可见字符串结尾添加一个 ‘ = ‘
例如
编码前字符串: abcd
转换为二进制 00111101 00111110 00111111 01000000
6bit为一组划分 001111 010011 111000 111111 010000 00
扩展到 8 bit 00001111 00010011 00111000 00111111 00010000 0000
补齐完整 00001111 00010011 00111000 00111111 00010000 00000000
编码后字符串 YWJjZA==
验证
使用python进行base64编码/解码
import base64
pwd = 'TVNEUzQ1NkFTRDEyM3p6'
user = 'Can u see me'
print(base64.b64decode(pwd))
print(base64.b64encode(user))
Unicode
简述: 字符集,为每种语言中的所有字符设定统一且唯一的编码。相当于一本很厚的字典。使用4个字节表示所有字符。
例如: 国 –> Unicode编码 –> \u000056FD
UTF-8编码
简述: 实现了对ASCII码的兼容。能够灵活的变换长度
编码规则:
单个字节的字符,二进制最高位为0,其余对应为Unicode码点[PS:字符对应编码后的数字]
UTF-8 Unicode码点范围 00xxxxxx 0000 0000 - 0000 007F N个字节的字符,高字节高N位为1(判断字节数),第N-1位为0,剩余字节高2位为10,剩下二进制位对应Unicode码点。
UTF-8 字节数 Unicode码点范围 110xxxxxx 10xxxxxx 2 0000 0080 - 0000 07FF 1110xxxxx 10xxxxxx 10xxxxxx 3 0000 0800 - 0000 FFFF 11110xxxx 10xxxxxx 10xxxxxx 10xxxxxx 4 0001 0000 - 0010 FFFF
例子: “国” —> UTF-8编码 –> 0xE5 0x9B 0xBD
“国”对应Unicode码点 0x56FD (0101 0110 1111 1101)
得出“国”对应UTF-8 格式为 1110xxxx 10xxxxxx 10xxxxxx
将Unicode码点从低位开始填充,不足补零
11100101 10011011 10111101
转换为16进制 0xE5 0x9B 0xBD
验证 查看UTF编码
URL编码
简述: URL编码格式采用 百分号+十六进制形式的ASCII码,解决在URL解析中出现字符解析歧义的问题。
对非法字符编码:对于非ASCII字符,官方RFC文档建议使用UTF-8进行编码得到相应字节。
编码过程例如:
①ASCII字符: url –> URL编码 –> %75%72%6c
- u r l 对应转换为75 72 6c
- 在加上百分号 %75 %72 %6c
②非ASCII字符: 你好 –> URL编码 –> %E4%BD%A0%E5%A5%BD
你 好 对应转换为 0xE40xBD0xA0 0xE50xA50xBD
加上百分号 %E4%BD%A0 %E5%A5%BD
2、常见加密算法
换位加密
栅栏加密
算法:
- 去空格后,将明文分割成N个/组
- 将每组的第i个组合在一起
- 将分割的字符串重新连接即得到密文。
例子: 明文 username password —> upsaesrsnwaomred
- 分割 第一组 username 第二组 password
- 组合 up sa es rs nw ao mr ed
- 连接 upsaesrsnwaomred
曲路密码
算法:
- 双方约定填充行列数、曲路路径(密钥)
- 根据路径解密
例子: 明文 congratulationtoyougetthekey —> yentaogekuirgtoehyanolotttuc
c o n g r a t u l a t i o n t o y o u g e t t h e k e y 规定从右下角方向向上为起点,左上角方向向上为终点。
加密后的数据 yentaogekuirgtoehyanolotttuc
列位移
算法:
- 双方约定填充行列数、字符串密钥。
- 根据字符在字母表中的顺序取加密后的数据。
例子: 明文
1 2 3 4 5 6 7 c o n g r a t u l a t i o n t o y o u g e t t h e k e y 规定密钥为 how are u ,分别对应顺序为 3471526
第一个数字为3则到第3列取数据nayh
以此类推 gtoe tney cutt riuk olot aoge
最终加密得到密文 nayhgtoetneycuttriukolotaoge
替换加密
凯撒密码
算法: 明文中的所有字母都在字母表上向左(向右)按照一个 固定数字(正数为右移) 偏移(自身不计算次数)。
例子: welcome —> 偏移量1 —> xfmdpnf
- 将每个字母都左移1个位置,即可得到密文 xfmdpnf
ROT5/ROT13/ROT18/ROT47
ROT5: 对数字进行编码。偏移量为5。0->5
ROT13: 对字母进行编码。偏移量为13。A->N
ROT18: ROT5、ROT13组合
ROT47: 对ASCII码中的字符进行编码。偏移量为47。A->p
维吉尼亚密码
简述: 根据密钥和密表进行加密解密。只能对字母进行加密。密文中同样的E可能对应不同的密钥,解决了字频统计破解密文。
维吉尼亚密表:第一列为明文字母,第一行为密钥字母
例子: 明文 flag:jiflag{I_Hn0w_n0thfng} –> 密钥 snbmos –> xybs:xaxybs{W_Zf0j_o0fvxft}
- 从维吉尼亚密码表中查找 (f行,s列)为x,依次列推,行列相交取密文。
- 忽视标点符号和数字
培根密码
简述: 使用AB、ab进行替代。本质上为二进制数。
算法:
- 第一种方式
A | aaaaa | B | aaaab | C | aaaba | D | aaabb | E | aabaa | F | aabab | G | aabba | H | aabbb | I | abaaa | J | abaab |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
K | ababa | L | ababb | M | abbaa | N | abbab | O | abbba | P | abbbb | Q | baaaa | R | baaab | S | baaba | T | baabb |
U | babaa | V | babab | W | babba | X | babbb | Y | bbaaa | Z | bbaab |
- 第二种方式
a | AAAAA | g | AABBA | n | ABBAA | t | BAABA |
---|---|---|---|---|---|---|---|
b | AAAAB | h | AABBB | o | ABBAB | u-v | BAABB |
c | AAABA | i-j | ABAAA | p | ABBBA | w | BABAA |
d | AAABB | k | ABAAB | q | ABBBB | x | BABAB |
e | AABAA | l | ABABA | r | BAAAA | y | BABBA |
f | AABAB | m | ABABB | s | BAAAB | z | BABBB |
例子: ABABAAABAABBAAA –> 培根密码 –> KEY
摩斯密码
简述: 通过不同的排列顺序和间隔停顿表达不同的字母、数字、符号。
3、JS混淆
简述:通过对JS变量名称和过程名称进行编码,通常使用eval()、function()进行混淆处理,保护代码段不透明。
常见混淆算法: JSFuck、Jother、aaencode
特点:
JSFcuk: 只存在 ()+[]! 这六个字符。
Jother: 使用少量字符进行编码。少量字符 !+()[]{}
aaencode: 将js代码编码为颜文字。[゚ε゚]+(゚ー゚)
4、非对称加密
简述: 使用两个不同的密钥进行加解密—-公开密钥和私有密钥。
典型非对称加密算法:RSA、ECC、ElGamal
5、对称加密
简述: 使用相同密钥进行加解密。
典型对称加密算法: DES、3DES、IDEA、AES
DES 特征: 64位密钥。因为其加密结果转换为Base64所以很容易误以为是Base64加密。除了ECB模式以外,都需要IV(偏移量),经常偏移量即密钥。
AES 特征: 分为AES-128 AES-192 AES-256 分别对应密钥长度为16B 24B 32B。因为其加密结果转换为Base64所以很容易误以为是Base64加密。除了ECB模式以外,都需要IV(偏移量),经常偏移量即密钥。
6、摘要算法
简述: 对所有数据提取指纹信息加密,具有不可逆性。
典型摘要算法: MD5、SHA
MD5 特征: 长度分为16位和32位。最大值为 F 。由 数字和字母 组成