【学习笔记】Base64编码解码原理及手动实现(C#)

【学习笔记】Base64编码解码原理及手动实现(C#)

1.【Base64编码原理】@叶落为重生

-base64的编码都是按字符串长度,以每3个8bit的字符为一组,
-然后针对每组,首先获取每个字符的ASCII编码,
-然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节
-然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节
-然后将这4个8bit的字节转换成10进制,对照Base64编码表 (下表),得到对应编码后的字符。

(注:1. 要求被编码字符是8bit的,所以须在ASCII编码范围内,u0000-u00ff,中文就不行。
   2. 如果被编码字符长度不是3的倍数的时候,则都用0代替,对应的输出字符为=)

【学习笔记】Base64编码解码原理及手动实现(C#)

比如举下面两个例子:

a) 字符长度为能被3整除时:比如“Tom” :

【学习笔记】Base64编码解码原理及手动实现(C#)
            T           o           m
ASCII: 84 111 109
8bit字节: 01010100 01101111 01101101
6bit字节: 010101 000110 111101 101101
十进制: 21 6 61 45
对应编码: V G 9 t
【学习笔记】Base64编码解码原理及手动实现(C#)

所以,code('Tom') = VG9t

b) 字符串长度不能被3整除时,比如“Lucy”:

L           u           c           y
ASCII:      76          117         99          121
8bit字节:   01001100    01110101    01100011    01111001      00000000    00000000
6bit字节:     010011      000111      010101      100011      011110  010000  000000  000000
十进制:     19          7           21          35             30      16      (异常) (异常)      
对应编码:   T           H           V           j               e       Q       =       =