• Base64 的算法原理

    前言

    Base64算法是我们日常生活中必不可少的加密编码方式之一,它常用64个可打印字符表示任意字符,通常用来储存、传输一些二进制数据;在一些加密方式,可以通过了解原理后进行更深入的加密运算操作。

    标准表

    由于它是使用64个可打印字符表示的数据,则一定有一种特殊的对应关系。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。但是,我们经常所说的Base64另外2个字符是:“+/”。这64个字符,所对应表如下

    编号字符 编号字符 编号字符 编号字符
    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 /
    有的加密就是通过魔改base64标准表,进而达到加密效果

    转换

    对于任意字符串,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。

    如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

    编码后的数据比原始数据略长,为原来的4/3。无论什么样的字符都会全部被编码。

    例子

    文本 M a n
    ASCII编码 77 97 110
    二进制位 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
    索引 19 22 5 46
    Base64编码 T W F u
    文本(1 Byte) A    
    二进制位 0 1 0 0 0 0 0 1                                
    二进制位(补0) 0 1 0 0 0 0 0 1 0 0 0 0                        
    Base64编码 Q Q = =
    文本(2 Byte) B C  
    二进制位 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1     x x x x x x
    二进制位(补0) 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 x x x x x x
    Base64编码 Q k M  =

    链接引用

    Base64 算法原理,以及编码、解码【加密、解密】 介绍:

    http://blog.chacuo.net/719.html

    用js实现的Base64加解密工具:

    https://kuangtant.gitee.io/tools/base64/

    上一篇:
    对 栈 的理解
    下一篇:
    Android studio生成so文件
    本文目录
    本文目录