落叶飞空 发表于 2017-6-2 22:38:49

python实现Base64加密

本帖最后由 落叶飞空 于 2017-6-2 22:46 编辑

Base64编码,是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!
   Base64编码原理:
    它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。但是,我们经常所说的Base64另外2个字符是:“+/”。这64个字符,所对应表如下。

转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。所以加密后的数据量是原来的4/3
       这样说,仔细思考一下,你会很快发现,一个问题,就是每次转换的字节数不一定就是24的整数倍,会出现有多余不足六位的情况,在base64中处理的方法是加零凑够六位,但是这样一来在解码的时候就会出现多余的位这该怎么办呢? 不用担心,base64想到了一个很好的解决办法。
       这个办法就是在 base64凑零的同时,还要满足凑出来的位数是8的倍数,不然就加一个或者两个特殊的六位=符号。为什么是一个或者两个=符号呢? 因为多个8位转为6位 只会出现 剩余 2位,4位的情况,剩余2位 只需要一个 表示六位的 = 便可变为8的整数;而剩余4位 需要两个表示6位的 = 便可以变成16 是8的整数。然后在解密的时候不解析 =即可。
   之所以位的总数需要凑成8的倍数,是因为base64主要用于加密后的数据传送,而在传送机制中都认为传送的最小单位是按照字节算的,所以不能出现不是位总数不是8的倍数的情况,在接收到数据后,按顺序将6位的base64直接按照顺序解密成字节就完成解密了。
    接下来通过几张图为大家进行详细的解释:

这是恰好三个字节转为base64


这是字节的位总数不是6的倍数的情况,当剩下4位时,我们需要补2个 =凑齐8的倍数;当剩下的是2位时,我们需要补齐1个 = 抽泣8的倍数。


http://img.blog.csdn.net/20160911234205557?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
以上基本原理参考自:http://blog.csdn.net/aozeahj/article/details/52507352
基于上述原理,采用python实现了Base64的加密:
**** Hidden Message *****

ooxx7788 发表于 2017-6-3 11:51:10

学习了!

Jackmok 发表于 2017-12-9 23:25:31

看看学习下

hkjianvchf0 发表于 2019-4-9 19:37:28

学习

cxysailor 发表于 2019-4-22 23:17:32

学习

jdzzj 发表于 2019-8-20 15:55:01

学习

永恒的蓝色梦想 发表于 2019-8-20 16:45:52

学习

crystal2011 发表于 2019-10-22 14:45:31

好资源共享

zzzttt 发表于 2020-3-4 01:23:30

{:10_275:}

huazhixia 发表于 2020-5-23 19:33:55

{:5_106:}

Mike_python小 发表于 2020-5-30 19:58:04

看看

java2python 发表于 2020-5-30 19:59:36

不会是吧ASCII的点阵给替换了?

15565222558 发表于 2020-6-6 22:58:36

kankan

文木东 发表于 2021-7-11 21:02:29

6

cabo 发表于 2021-7-18 16:42:41

q
页: [1]
查看完整版本: python实现Base64加密