Base64 字母表

Base64 编码将一个 8 位字节序列拆成 6 位的片段,并为每个 6 位的片段分配一个字符,这个字符是 Base64 字母表中的 64 个字符之一。

Wert Zeichen Wert Zeichen Wert Zeichen Wert Zeichen Wert Zeichen Wert Zeichen Wert Zeichen Wert Zeichen
0 A 8 I 16 Q 24 Y 32 g 40 o 48 w 56 4
1 B 9 J 17 R 25 Z 33 h 41 p 49 x 57 5
2 C 10 K 18 S 26 a 34 i 42 q 50 y 58 6
3 D 11 L 19 T 27 b 35 j 43 r 51 z 59 7
4 E 12 M 20 U 28 c 36 k 44 s 52 0 60 8
5 F 13 N 21 V 29 d 37 l 45 t 53 1 61 9
6 G 14 O 22 W 30 e 38 m 46 u 54 2 62 +
7 H 15 P 23 X 31 f 39 n 47 v 55 3 63 /

Base64 编码实例

上图显示了一个简单的 Base64 编码实例。在这里,三个字符串组成的输入值“Ow!”是 Base64 编码的,得到的是 4 个字符的 Base64 编码值“T3ch”。它是按以下方式工作的。

  1. 字符串“Ow!”被拆分成 3 个 8 位的字节(0x4F、0x77、0x21)。
  2. 这 3 个字节构成了一个 24 位的二进制值 010011110111011100100001。
  3. 这些位被划分成为一些 6 位的序列 010011、110111、01110、100001。
  4. 每个 6 位值都表示了从 0~63 之间的一个数字,对应 Base64 字母表 64 个字符之一。得到的 Base64 编码字符串是个 4 位字符的字符串“T3ch”。
 

Base64 填充

Base64 编码收到一个 8 位字节序列,将这个二进制序列流划分成 6 位的块。二进制序列有时不能正好平均分成 6 位的块,在这种情况下,就在序列末尾填充零位,使二进制序列的长度成为 24 的倍数(6 和 8 的最小公倍数)。对已填充的二进制串进行编码时,任何完全填充(不包含原始数据中的位)的 6 位组都由特殊的第 65 个符号 “=” 表示。如果 6 位组是部分填充的,就将填充位设置为 0。

上图显示了一个填充实例。初始输入字符串为 “a:a”为 3 字节(24位)。24 是 6 和 8 的倍数,因此无需填充,得到 Base64 编码字符串为 “YTph”。然而,再增加一个字符,输入字符串会变成 32 位长。而 6 和 8 的下一个公倍数是 48,因此要添加 16 位 填充码。填充的前 4 位是与数据位混合在一起的。得到的 6 位组是 01xxxx,会被当作 010000、十进制中的 16,或者 Base64 编码的 Q 来处理。剩下的两个 6 位组都是填充吗,用 “=”表示。

URL安全的 Base64 编码

先将内容以 Base64 编码,然后检查结果字符串,将字符串中的 “+” 替换成 “-”、“/” 替换成 “_”,同时省略尾部的填充符号 “=”。

Base64 编码的更多相关文章

  1. URL安全的Base64编码

    Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...

  2. Base64编码

    Base64编码 写在前面 今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发 ...

  3. Android数据加密之Base64编码算法

    前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...

  4. 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希

    据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...

  5. Base64编码【转】

    转http://www.cnblogs.com/luguo3000/p/3940197.html 开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际上Base64已经简单到不能 ...

  6. 【前端攻略】:玩转图片Base64编码

    引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 编码.标题略大,不过只是希望通过一些浅显 ...

  7. 为什么要用base64编码

    1.需求 了解为什么要使用base64对数据编码 2.理由 因为传输二进制数据的时候,网络中间的有些路由会把ascii码中的不可见字符删了,导致数据不一致.一般也会对url进行base64编码 Whe ...

  8. 图片Base64编码

    我们经常在做Jquery插件的时候需要插入一些自定义的控件,比如说按钮,而我们自己又觉着button标签很丑,而且不同浏览器显示的效果还不一样,这个时候我们需要用到图片,当然,我们可以通过img标签添 ...

  9. 浅析用Base64编码的图片优化网页加载速度

    想必大家都知道网页加载的过程,从开始请求,到加载页面,开始解析和显示网页,遇到图片就再次向服务器发送请求,加载图片.如果图片很多的话,就会产生大量的http请求,从而影响页面的加载速度.所以现在有一种 ...

  10. Base64编码原理分析

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在了解Base64编码之前,先了解几个基本概念:位.字节. 位:"位(bit)"是计算机中最小的数据单位.每一位 ...

随机推荐

  1. 对String的一点了解

    /** * @param args */ public static void main(String[] args) { String str1 = "welcome"; Str ...

  2. Spark生态之Spark BlinkDB

  3. 使用list和tuple

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  4. UIBezierPath精讲

    前言 笔者在写本篇文章之前,也没有系统学习过贝塞尔曲线,只是曾经某一次的需求需要使用到,才临时百度看了一看而且使用最基本的功能.现在总算有时间停下来好好研究研究这个神奇而伟大的贝塞尔先生! 笔者在学习 ...

  5. 【Stage3D学习笔记续】真正的3D世界(三):纹理效果

    混合模式: 代码 示例是<Stage3D指南>中的直接弄出来的,可以通过点击键盘上的Q.W.E这3个按键,更换混合模式.模型和纹理,可以直观的查看不同混合模式的效果,住:下方的地形使用&q ...

  6. html中的body标签

    <head>标签代表的是页面的"头部",而<body>标签代表的就是页面的"身体"了.如果说<html>标签定义了网页的开始 ...

  7. SQLite使用教程3 数据类型

    http://www.runoob.com/sqlite/sqlite-data-types.html SQLite 数据类型 SQLite 数据类型是一个用来指定任何对象的数据类型的属性.SQLit ...

  8. [linux]发现一个vim的常用命令的图表,做的挺好,转过来

  9. linux下eclipse的安装

    Eclipse的安装http://java.sun.com/javace/downloads/index.jsp下载:Jdk-6u17-linux-i586.binhttp://www.eclipse ...

  10. 使用openssl库实现des,3des加密

    原文地址: 使用openssl库实现des,3des加密 主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题. #include <stdio.h> #in ...