Atitit.Base64编码原理与实现设计

Atitit.Base64编码原理与实现设计

1. Base64编码1

1.1. 为什么要用自己的base64编码方案1

2. Base64编码由来1

3. Base64编码原理1

3.1. 具体来说,转换方式可以分为四步:2

3.2. 注意2

3.3. Padding3

4. URL安全的Base64编码3

1. Base64编码

1.1. 为什么要用自己的base64编码方案

防止apache codec  jdk的jar冲突。

2. Base64编码由来

Base64最早是用来解决电子邮件的传输问题。

传统的电子邮件是1982年定下技术规范的,详见rfc0822。该规范的一个重要特点,就是规定电子邮件只能使用ASCII可打印字符。这就导致非英语字符或二进制文件(比如图片)不同通过电子邮件进行传输了。

作者::  ★(attilax)>>>   绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:[email protected]

转载请注明来源: http://www.cnblogs.com/attilax/

3. Base64编码原理

简单来说, Base64编码就是从ASCII码中选出64个字符----大写字母A-Z、小写字母a-z、数字0-9、符号"+"、"/"(再加上作为填充字符的"=",实际上是65个字符),作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

3.1. 具体来说,转换方式可以分为四步:

1. 将每三个字节分成一组,一共24个二进制位:3*8=24

2. 将这24个二进制位分成4组,每组有6个二进制位:24/4=6

3. 在每组前加两00,扩展成32个二进制位,即4个字节:4*(6+2)=32

4.

根据下面的编码表,得到扩展后每个字节的对应符号,就是Base64的编码值

5.

Value Encoding  Value Encoding  Value Encoding  Value Encoding

0 A            17 R            34 i            51 z

1 B            18 S            35 j            52 0

2 C            19 T            36 k            53 1

3 D            20 U            37 l            54 2

4 E            21 V            38 m            55 3

5 F            22 W            39 n            56 4

6 G            23 X            40 o            57 5

7 H            24 Y            41 p            58 6

8 I            25 Z            42 q            59 7

9 J            26 a            43 r            60 8

10 K            27 b            44 s            61 9

11 L            28 c            45 t            62 +

12 M            29 d            46 u            63 /

13 N            30 e            47 v

14 O            31 f            48 w         (pad) =

15 P            32 g            49 x

16 Q            33 h            50 y

6.

3.2. 注意

1. 因为转换后的每个字符的最高两位都是0,所以实际有效位数是6位,也就是26=64个字符就可以覆盖所有的编码。

2. 如果剩下的字符不足3个字节,则用0填充,输出字符使用"=",因此编码后输出的文本末尾可能会出现1或2个"="。

3. 因为Base64将3个字节转化成4个字节,因此Base64编码后的文本,会比原文本大出三分之一左右。

3.3. Padding

Base64是三个字节(Bytes)作为一组(24-bit block)的编码转换,如果字节数不是三的倍数,那么就会出最后一组只有一个或者两个字节的情况,按下面的规则处理:

1. 一个字节的情况:将这一个字节的8个二进制位,按照每组6个二进制位转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个"="号。

2. 二个字节的情况:将这二个字节的一共16个二进制位,按每组6个二进制位转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。

参考base64架构图片

4. URL安全的Base64编码

由于‘+’,‘/’两个字符在URL中有特殊含义,将Base64编码后的数据在通过URL传输时需要通过URL编码进行转义,但是这样子会导致URL无意义的变长,而且多了一个URL编解码步骤。为了避免这个问题,出现了一种用于URL的改进Base64编码变种,它其实就是简单的把标准Base64中的‘+‘和‘/‘分别改成了‘-‘和‘_‘。对于填充字符‘=‘,有些变种是把它直接去掉,有些则是把它替换成‘.‘。

Base64编码学习笔记 - 简书.html

时间: 2024-12-25 02:01:13

Atitit.Base64编码原理与实现设计的相关文章

Base64 编码原理

1.编码表 2.原理[汉字不能base64编码] base64 编码就是将字符以3个为一组,因为一个字符由8个位组成,3*8=24位,然后以顺序以6个位拿出,前面补2位,凑成8位--一个字节 原字节不能被3整除的,在后面补 由8个0,构成的单字节,一般补1个或是2个(0000 0000),这些后面补的字节不能用base64编码对应,应该是异常字符,用“=”号替换, 所以,base64编码一般最后会有1~2个“=”号 示例: base64编码前:Lucy L u c yASCII: 76 117

BASE64编码原理分析脚本实现及逆向案例

BASE64编码原理分析脚本实现及逆向案例 0x01 简单介绍 数据传送时并不支持所有的字符,很多时候只支持可见字符的传送.但是数据传送不可能只传送可见字符为解决这个问题就诞生了base64编码.base64编码将所有待编码字符转换成64个可见字符表中的字符. 0x02 编码原理 被Base64编码之后所得到的所有字符都是在以下这个表当中的. 上表中总共有64个字符,2^6=64所以只需要6个bit位就足够描述所有的表中字符了.计算机中1个字节8个bit,一个ASCII码占1个字节.因此多出来的

Base64编码原理及应用

最近在做一个H5上传图片并压缩的项目,其过程主要是先将图片上传通过readAsDataURL获取上传图片base64编码,然后根据高宽比将图片画到canvas上实现压缩,在通过toDataURL获取压缩后的图片.点击可查看demo在该过程中用到base64编码,于是就想弄清楚base64编码原理,才有了这篇博客. Base64编码的来历 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送.这样用途就

Base64编码原理分析

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在了解Base64编码之前,先了解几个基本概念:位.字节. 位:"位(bit)"是计算机中最小的数据单位.每一位的状态只能是0或1: 字节:8个二进制位构成1个"字节(Byte)",字节是存储空间的基本计量单位.1个字节可以储存1个英文字母,2个字节可以存储1个汉字: Base64编码的作用 因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通

Base64编码原理

转自: http://blog.chacuo.net/719.html Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!有时候,我们学习转换的思路后,我们其实也可以结合自己的实际需要,构造一些自己接口定义编码方式.好了,

Base64编码原理与应用

本文内容转自网络,如需详细内容,请参考相关网址. http://my.oschina.net/goal/blog/201032 代码参考:http://blog.csdn.net/prsniper/article/details/7097643 Base64,它用作把任意序列的8位字节描述为一种不易被人直接识别的形式,常用作开发中用于传递参数.浏览器的img标签通过base64字符串来渲染图片以及电子邮件的正文编码等等. 在计算机中显示的字符,比如英文字母.数字以及英文标点符号就是用一个字节来存

BASE64编码原理与Golang代码调用

一.概念简介 Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符.3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示.它可用来作为电子邮件的传输编码.在Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同. Base64常用于在通常处理文本数据的场合,表示.传输.存储一些二进制数据 二.代码调用 在Golang中提供了

一篇文章彻底弄懂Base64编码原理

在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一.在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输.那么,Base64到底起到什么作用呢? 在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现

知识扩展——(转)一篇文章彻底弄懂Base64编码原理

在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. 一.Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一.在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输.那么,Base64到底起到什么作用呢? 在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会