Base64 笔记

标签: Base64
318人阅读 评论(0) 收藏 举报
分类:

来自维基百科

简介

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>
查看评论

Node.js Zlib模块

zlib模块提供了用Gzip和Deflate/Inflate实现的压缩功能。 压缩或解压一个流(诸如一个文件)可以通过管道将源数据流通过一个zlib流转化为目标流。...
  • chy555chy
  • chy555chy
  • 2016-09-25 17:31:40
  • 3191

图像Exif Orientation

图像共用八种方向
  • gph66
  • gph66
  • 2016-01-25 15:43:36
  • 248

unity3d的base64和MD5

public static string Base64Decode(string str)       {           byte[] bytes = Convert.FromBase64Str...
  • qq_22780533
  • qq_22780533
  • 2016-07-01 14:40:17
  • 503

Delphi Base64编码/解码及ZLib压缩/解压

最近做项目用到Base64编码及ZLib压缩,发现Delphi自带的Base64编码与java的Base64编码不一致,找了很多方法才解决这个问题,在这里来作一些总结: 压缩方法: StrToBas...
  • zjm12343
  • zjm12343
  • 2015-03-07 16:48:52
  • 539

CTF竞赛之misc-base64

Base64知识点定义:base64是一种编码方式,是把二进制数据编码为可写的字符形式的数据。这是一种可逆的编码形式。用base64这种方式编码后得到的是一个字符串,其中的字符可以包括a-z、A-Z、...
  • qq_39414668
  • qq_39414668
  • 2017-09-10 20:46:47
  • 96

关于javamail的一些笔记

1.为什么要学习javamail? 企业中系统 经常需要信息通知 和 信息校验 2.利用telnet实现邮件收发 注册sina和sohu账户 yuyang94895@sina.com yuyang9...
  • qhwc2009
  • qhwc2009
  • 2015-05-14 11:11:22
  • 1406

Centos7安装Zabbix server端

安装Zabbix服务器端CentOS版本:7.0 Zabbix版本: 3.0.3(1)首先配置LAMP环境:# yum -y install gcc gcc-c++ autoconf l...
  • Juladoe
  • Juladoe
  • 2017-08-03 08:58:25
  • 1142

Base64笔记

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

Base64转换工具

  • 2010年01月19日 11:52
  • 450KB
  • 下载

base64

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如...
  • cuiyifang
  • cuiyifang
  • 2012-10-10 08:55:52
  • 1088
    个人资料
    持之以恒
    等级:
    访问量: 8万+
    积分: 1110
    排名: 4万+
    个人主页
    最新评论