Base64原理解析

原创 2017年12月06日 20:23:03
一 Base64编码由来
为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种基于64个可打印字符来表示二进制数据的表示方法。

二 Base64编码原理
看一下Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符。数值代表字符的索引,这个是标准Base64协议规定的,不能更改。64个字符用6个bit位就可以全部表示,一个字节有8个bit 位,剩下两个bit就浪费掉了,这样就不得不牺牲一部分空间了。这里需要弄明白的就是一个Base64字符是8个bit,但是有效部分只有右边的6个 bit,左边两个永远是0。

三 Base64秘钥

四 转换举例
1、那么怎么用6个有效bit来表示传统字符的8个bit呢?8和6的最小公倍数 是24,也就是说3个传统字节可以由4个Base64字符来表示,保证有效位数是一样的,这样就多了1/3的字节数来弥补Base64只有6个有效bit 的不足。你也可以说用两个Base64字符也能表示一个传统字符,但是采用最小公倍数的方案其实是最减少浪费的。结合下边的图比较容易理解。Man是三个 字符,一共24个有效bit,只好用4个Base64字符来凑齐24个有效位。红框表示的是对应的Base64,6个有效位转化成相应的索引值再对应 Base64字符表,查出"Man"对应的Base64字符是"TWFU"。说到这里有个原则不知道你发现了没有,要转换成Base64的最小单位就是三个字节,对一个字符串来说每次都是三个字节三个字节的转换,对应的是Base64的四个字节。
2、但是转换到最后你发现不够三个字节了怎么办呢?我们可以用两个Base64来表示一个字符或用三个Base64表示两个字符,像下图的A对应的第二个Base64的二进制位只有两个,把后边的四个补0就是了。所以 A对应的Base64字符就是QQ。上边已经说过了,原则是Base64字符的最小单位是四个字符一组,那这才两个字 符,后边补两个"="吧。其实不用"="也不耽误解码,之所以用"=",可能是考虑到多段编码后的Base64字符串拼起来也不会引起混淆。由此可见 Base64字符串只可能最后出现一个或两个"=",中间是不可能出现"="的。下图中字符"BC"的编码过程也是一样的。

五 Base64编码实例
密文:amlrZXh1ZXl1YW4=
明文:jiekexueyuan

六 Base64算法定义
Base64是一种基于64个字符的编码算法,以任意8位字节序列组合的描述形式,这种形式不容易直接识别。经Base64编码后的字符串的字符数是以4为单位的整数倍。
版权声明:本文为博主原创文章,未经博主允许不得转载。

base64原理解析

开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间...
  • wodeyuer125
  • wodeyuer125
  • 2015年04月20日 14:43
  • 7856

Base64编码原理解析与Java实现

20180202更新:简化前言,重新排版。使用MARKDOWN排版:新版链接 一、前言 碰巧在慕课看到一个关于Base64的课程《Java实现Base64加密》,发现介绍了3个AP...
  • zdqdj1
  • zdqdj1
  • 2016年06月26日 00:39
  • 2653

base64位编码原理与分析

转自:http://blog.csdn.net/caianye/article/details/7592806 打开一封QQ邮箱,显示邮件原文,你将会看到如下这样的信息: This i...
  • dongdong0071
  • dongdong0071
  • 2016年09月06日 17:52
  • 544

Base64编码原理解析

网上关于Base64编解码原理的资料已经很多了,这里只是自己梳理一下知识点而已。如有不确,望批评指正。 概念: Bas64编码顾名思义,就是用64个可显示字符来显示二进制的编码方式。64个...
  • zhangjie121
  • zhangjie121
  • 2015年06月03日 11:38
  • 402

BASE64编码原理解析

原理 1.每个字符按照ASCII编码对应一个8bit,以3字符为一组 2.3*8=24,分成4份,每份6bit,在每份高位添加00,重新合成一个4份8bit数据 3.新的4份8bit...
  • jsshaojinjie
  • jsshaojinjie
  • 2016年08月05日 15:47
  • 390

base64加密原理详解

base64加密原理详解          声明:本文是在看了他人总结,并摘抄大部分图文,和少量自己的总结写成          原作者地址链接:Base64算法原理       Base64编...
  • aozeahj
  • aozeahj
  • 2016年09月11日 23:18
  • 4059

在浏览器中解析Base64编码图像

上一篇介绍中,我们将二进制文件(BLOB)保存为Base64编码的文本,这些文本可以内嵌在XML的标签中,因此二进制信息它可以随着XML文件被拷贝、下载而不用担心信息会缺失。这项技术也在email邮件...
  • elf8848
  • elf8848
  • 2014年10月09日 10:56
  • 2325

Base64编码解码原理详解

Base64编码解码原理详解1. Base64字符的组成部分 Base64所用字符: 0,1,2 ….9 A,B,C,D…Z a,b,c,d…z + / 对应ASCII: 48,49…5...
  • u013412497
  • u013412497
  • 2016年06月01日 00:51
  • 7290

javascript 图片解析Base64字符串

var txtBaseCode = document.getElementById("txtBaseCode"); function convertImgToBase64(url, callba...
  • zrh1121
  • zrh1121
  • 2016年05月17日 17:04
  • 1478

在线解析Base64编码图像

上一篇介绍中,我们将二进制文件(BLOB)保存为Base64编码的文本,这些文本可以内嵌在XML的标签中,因此二进制信息它可以随着XML文件被拷贝、下载而不用担心信息会缺失。这项技术也在email邮件...
  • smart_ljh
  • smart_ljh
  • 2016年05月17日 11:11
  • 1342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Base64原理解析
举报原因:
原因补充:

(最多只允许输入30个字)