Short introduction to BASE64

BASE64算法是一个常见的加密算法,可以实现对文本的加密,据说还可以将二进制的文件转换成文本文件,通常电脑中的所有的文件都是以二进制流的形式存 储在硬盘上的,这样一来,也许所有的文件都可以转换为文本了吧:)!不管怎么说,其转换的算法都是想同的,下面以简单的ASCII文本为例,介绍一下 BASE64算法的转换过程!
    我们知道通常的计算机系统当中,一个字节是由8个二进制位组成的,例如“A”的ASCII编码值是十进制数的65,转换成二进制数就是 “01000001”,而BASE64算法就是在这样的二进制的基础上进行编码的。算法首先取3个字节的数据,转换成二进制,我们就用可爱的企鹅举个例子 吧:
        “TUX”
转换成二进制:
        “01010100 01010101 01011000”
注意:这里每个字节间的空格实际上是不存在的
这样我们就得到了8*3=24个二进制位组成的序列,然后再将这24个位每6个分一组,分成24/6=4组:
        “010101 000101 010101 011000”
将这四个分组高位补零,形成可以转换为一个字节的8位:
        “00010101 00000101 00010101 00011000”
再将这四个字节转换成十进制数:
        “21 5 21 24”
接下来我们要构建一个编码表:
        0    A     17 R     34 i     51 z

        1    B     18 S     35 j     52 0

        2    C     19 T     36 k    53 1

        3    D     20 U    37 l   54 2

        4    E     21 V     38 m    55 3

        5    F     22 W    39 n    56 4

        6    G     23 X    40 o    57 5

        7    H     24 Y    41 p    58 6

        8 I     25 Z     42 q    59 7

        9    J     26 a     43 r    60 8

        10 K     27 b     44 s    61 9

        11 L     28 c     45 t     62 +

        12 M     29 d    46 u    63 /

        13 N     30 e     47 v    (pad) =

        14 O     31 f     48 w

        15 P     32 g     49 x

        16 Q     33 h     50 y

用刚才我们得到的四个十进制数在表中查到相应的字符值:
        “VFVY”
这样就完成了编码过程,得到了加密后的文本!
    因为在编码过程中把3个8位的二进制数实际上转换成了4个6位的二进制数,而6位的二进制数只能表示0~(2^6-1)这个区间内的64个数,所以该算法被命名位BASE64算法!
    可是这里就有一个问题了,如果待加密的数据的长度不是3的整数倍怎么办,我们怎么做到每次取3个数进行加密呢?
        例:加密“Linux”
        =>“01001100 01101001 01101110 01110101 01111000 (pad)”
用(pad)来暂时补齐3的整数倍个字节;
        =>“010011 000110 100101 101110 011101 010111 1000(00) (pad)”
注意:最后两个“0”是补上的,保证每个分组6位数;
        =>“00010011 00000110 00100101 00101110 00011101 00010111 00100000 (pad)”
        =>“19 6 37 46 29 23 32 (pad)”
        =>“TGludXg=”
这样就完成了编码!
    其实“(pad)”就是个记号,用了几个“(pad)”,就在末尾补几个“=”!因此很多编码后得到的字符串都是以一个或两个“=”结尾的,这也是可以识别BASE64编码的一个重要的特点!

评论

此博客中的热门博文

AVR Tutorial - Input / Output

EJB - Intro to Session beans

AVR ADC Analog to Digital Converter