编码算法

毛线球上的喵星人 41 2022-01-27

前言

严格来说,编码并不算在信息安全里,只是将信息使用另一个形式进行传输或者是表面上的不可阅读而已。

算法

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个等号

使用场景

  1. 一些文本传输协议不支持"不可见字符"的传输,如SMTP等,需要将其转码成可见文本进行传输。
  2. 将小图片或小文件转换成base64后,就可以将二进制数据当作字符串在不同异构系统中进行传输、保存。
  3. 肉眼上的不可见,base64本身算法不复杂,编码和解码本身性能开销很小,但是对于人脑还是较麻烦的。

# 算法 # 编码 # Base64