编码算法
前言
严格来说,编码并不算在信息安全里,只是将信息使用另一个形式进行传输或者是表面上的不可阅读而已。
算法
Base64
网上说的最多的就是Base64。“用Base64加密一下“,这种说法是不严谨的,因为它只能够实现肉眼上的不可读。
Base64算法是一种编码算法,将二进制数据使用64个ASKII字符表达,主要用于解决二进制数据在不同端的不兼容问题。一些特殊的二进制流在不同的设备、系统中可能表示的意义不同,同时老设备、早期的软件、系统、协议对二进制数据的处理方式也可能不相同,但是基于ASKII的编码在大多数设备的行为都是一致的。
原理
将 字符/二进制 数据按字节(ASKII | 8位)进行拆分,其中若拆分后二进制不足8位则在前面补0,拆分之后检查,如果总字节数不能被3整除(最少3个字节才能转换成4个Base64字节),则在最后补0使总字节数可被3整除,再以6位为一组按照Base64映射表进行编码(2^6=64),编码后,按照之前末尾补零的数量,在编码末尾添加对应的’=’表示补0的数量。
Base64映射表
数值 | 字符 | 数值 | 字符 | 数值 | 字符 | 数值 | 字符 | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w | |||
1 | B | 17 | R | 33 | h | 49 | x | |||
2 | C | 18 | S | 34 | i | 50 | y | |||
3 | D | 19 | T | 35 | j | 51 | z | |||
4 | E | 20 | U | 36 | k | 52 | 0 | |||
5 | F | 21 | V | 37 | l | 53 | 1 | |||
6 | G | 22 | W | 38 | m | 54 | 2 | |||
7 | H | 23 | X | 39 | n | 55 | 3 | |||
8 | I | 24 | Y | 40 | o | 56 | 4 | |||
9 | J | 25 | Z | 41 | p | 57 | 5 | |||
10 | K | 26 | a | 42 | q | 58 | 6 | |||
11 | L | 27 | b | 43 | r | 59 | 7 | |||
12 | M | 28 | c | 44 | s | 60 | 8 | |||
13 | N | 29 | d | 45 | t | 61 | 9 | |||
14 | O | 30 | e | 46 | u | 62 | + | |||
15 | P | 31 | f | 47 | v | 63 | / |
举例说明
这里以文本数据进行解释说明,容易理解。
文本 | Mx | ||||||
字符 | M | x | 按照字符拆分 | ||||
Askii码 | 1001101 | 1111000 | 字符对应的askii码 | ||||
补零 | 01001101 | 01111000 | 在前面补零至8位 | ||||
分组 | 010011 | 010111 | 100000 | 按6位一组重新分组 | |||
编号 | 19 | 23 | 32 | 转换10进制 | |||
转码 | T | X | g | 根据编号和表格进行编码 | |||
结果 | TXg= | 由于总字节数为2,不能被3整除,所以补1个等号 |
使用场景
- 一些文本传输协议不支持”不可见字符”的传输,如SMTP等,需要将其转码成可见文本进行传输。
- 将小图片或小文件转换成base64后,就可以将二进制数据当作字符串在不同异构系统中进行传输、保存。
- 肉眼上的不可见,base64本身算法不复杂,编码和解码本身性能开销很小,但是对于人脑还是较麻烦的。
编码算法
https://maoxianck.github.io/算法相关/编码算法/