base64加密原理详解
来源:互联网 发布:域名投资的秘密电子书 编辑:程序博客网 时间:2024/06/10 13:37
base64加密原理详解
声明:本文是在看了他人总结,并摘抄大部分图文,和少量自己的总结写成
原作者地址链接:Base64算法原理
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的倍数。
- base64加密原理详解
- Base64加密原理
- base64加密原理
- base64 加密原理
- Base64加密原理(转)
- base64加密原理
- Base64加密原理
- base64 加密方式详解
- base64加密原理及作用
- Java Base64加密、解密原理
- base64加密原理代码实现
- Base64加密解密原理以及代码实现
- Java Base64加密、解密原理Java代码
- Base64加密原理及其实现算法
- Base64加密解密原理以及代码实现
- Base64加密解密原理以及代码实现
- Base64加密解密原理以及代码实现
- Java Base64加密、解密原理Java代码
- 软件工程之概述
- Gulp入门教程
- 线程间通信、等待/唤醒机制的使用
- 算法竞赛入门经典 1 实验
- 2016 大连网络赛 HDU 5874 Friends and Enemies【思维】
- base64加密原理详解
- 非信任机构的https证书,afnetworking 会报错解决办法:
- 剑指offer - 面试题3:二维数组中的查找
- LeetCode 67. Add Binary
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution
- LeetCpde 246 -- Strobogrammatic Numbe I
- POJ 2289Jamie's Contact Groups 二分图多重匹配
- MySQL之——服务器调优思路
- Add Digits