Base64 笔记

原创 2016年12月22日 19:53:19

来自维基百科

简介

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后binhex的版本使用不同的64字符集来代表6个二进制数字,但是它们不叫Base64。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email、在XML中存储复杂数据。

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

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

应用

Base64可用于在XML文件中保存二进制数据。

《SDL Game Development》一书中的.tmx地图文件(XML文件)首先使用zlib对数据进行压缩,然后使用Base64进行编码。

<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="right-down" width="20" height="15" tilewidth="32" tileheight="32" nextobjectid="1">
 <tileset firstgid="1" name="blocks1" tilewidth="32" tileheight="32" spacing="2" margin="2" tilecount="198" columns="18">
  <image source="D:/testSDL/testSDL/assets/blocks1.png" width="614" height="376"/>
 </tileset>
 <tileset firstgid="199" name="blocks2" tilewidth="32" tileheight="32" spacing="2" margin="2" tilecount="198" columns="18">
  <image source="D:/testSDL/testSDL/assets/blocks2.png" width="614" height="376"/>
 </tileset>
 <layer name="Tile Layer 1" width="20" height="15">
  <data encoding="base64" compression="zlib">
   eJxjYKA/SATipAGwFx3EAXE8ECcMkP3JQJwCxKkDZD+l4D4QPwDih1Qy7yMQfwLiz3jUbEDChAAzIwMDCyM1XAYBokCzxIBYnwpmSgCxJBBLAbE0EMsAsSwWdU+JNE8AiP3QMD8Z9hFrnicWeS8s5kgxQjAu82DyuMyDycMwAK5SFY8=
  </data>
 </layer>
</map>

Base64使用案例

Base64是一种用64个字符来表示任意二进制数据的方法。 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2015年11月20日 17:58
  • 3802

Base64 笔记

来自维基百科简介Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元...
  • yjwx0018
  • yjwx0018
  • 2016年12月22日 19:53
  • 299

图片与base64之间的相互转换

import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; ...
  • songjunyan
  • songjunyan
  • 2015年07月28日 22:29
  • 2167

Base64笔记

作者: 阮一峰 日期: 2008年6月23日 1. 昨天的《MIME笔记》中提到,MIME主要使用两种编码转换方式----Quoted-printable和Base64----将8位的非英语...
  • Viidiot
  • Viidiot
  • 2013年09月21日 08:48
  • 627

笔记113--关于Base64

使用场景:文件不太大时,转为base64字符串进行传输。文件太大会造成效率上的问题,具体多大不知道。...
  • mwj_88
  • mwj_88
  • 2015年06月18日 18:00
  • 322

js base64编码格式图片另存为下载

需求网页中 base64编码过的图片,点击某按钮下载此图片风来了.fox
  • wljk506
  • wljk506
  • 2017年02月22日 16:23
  • 5730

C语言实现base64编码

base64编码,基于C语言实现; 为了直观表现原理,使用位操作符实现; base64编码原理: 每个字节都是由8位二进制组成,base64编码是将3个8位的字节转换成4个6位的base64...
  • qq_32345239
  • qq_32345239
  • 2016年08月31日 09:39
  • 3551

base64原理解析

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

Base64算法 编码过程和原理

Base64的算法底层原理是怎样的。它的计算过程又是如何。通过这篇文章我们可以了解这些,甚至手算编码。...
  • U2U22
  • U2U22
  • 2016年08月24日 10:40
  • 1119

base64 自定义码表 实现加密解密

简介:base64 是在加密过程对byte转换为string的一个过程,解密过程则是对string转换为byte的过程。算法:byte转换:1、将原byte 由3个,3个分成一组, 不足3个的为一组 ...
  • hackerwin7
  • hackerwin7
  • 2015年03月30日 13:16
  • 5027
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Base64 笔记
举报原因:
原因补充:

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