base64到底是什么东西呢?

Base64编码是网络上常见的用于传输8bit字节数据的一种编码方式之一 , 有些人和书本会将编码写成加密算法,这其实是欠妥的。因为任何人拿到编码后的数据都能转化成原始数据,算法是透明的,也不存在秘钥的概念。

实现原理

Base64编码将一个8位子节序列拆散为6位的片段,并为每个6位的片段分配一个字符,这64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/" , 看到这里知道64是什么意思了吧,是代表64个字符,其实还有一个垫字的"=",实际上是65个字符。

Base64规则如下:

第一步,将每三个字节作为一组,一共是24个二进制位。

第二步,将这24个二进制位分为四组,每个组有6个二进制位。

第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。所以base64编码字符串大约比原来大了33%

例子

举一个具体的实例,演示英语单词Man如何转成Base64编码。

Text content M a n
ASCII 77 97 110
Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Index 19 22 5 46
Base64-Encoded T W F u

第一步,"M"、"a"、"n"的ASCII值分别是77、97、110,对应的二进制值是01001101、01100001、01101110,将它们连成一个24位的二进制字符串010011010110000101101110。

第二步,将这个24位的二进制字符串分成4组,每组6个二进制位:010011、010110、000101、101110。

第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节:00010011、00010110、00000101、00101110。它们的十进制值分别是19、22、5、46。

第四步,根据下图,得到每个值对应Base64编码,即T、W、F、u。

因此,Man的Base64编码就是TWFu。

如果字节数不足三,则这样处理:

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

比如,"Ma"这个字符串是两个字节,可以转化成三组00010011、00010110、00010000以后,对应Base64值分别为T、W、E,再补上一个"="号,因此"Ma"的Base64编码就是TWE=。

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

比如,"M"这个字母是一个字节,可以转化为二组00010011、00010000,对应的Base64值分别为T、Q,再补上二个"="号,因此"M"的Base64编码就是TQ==。

再举一个中文的例子,汉字"严"如何转化成Base64编码?

这里需要注意,汉字本身可以有多种编码,比如gb2312、utf-8、gbk等等,每一种编码的Base64对应值都不一样。下面的例子以utf-8为例。

首先,"严"的utf-8编码为E4B8A5,写成二进制就是三字节的"11100100 10111000 10100101"。将这个24位的二进制字符串,按照第3节中的规则,转换成四组一共32位的二进制值"00111001 00001011 00100010 00100101",相应的十进制数为57、11、34、37,它们对应的Base64值就为5、L、i、l。

所以,汉字"严"(utf-8编码)的Base64值就是5Lil。

那有童鞋会问了,这个到底有什么用?应用场景是怎样的?

base64的初衷,是为了满足电子邮件中不能直接使用非ASCII码字符的规定.现在最常用的应用场景就是在http协议上传输较长的文本信息。它是将用户输入的二进制数据,打包成一种安全格式,将其作为http首部字段的值发送出去,而无须担心其中包含会破坏HTTP分析程序的冒号、换行符或二进制值。

除此以外,也有其他重要的意义:

a)所有的二进制文件,都可以因此转化为可打印的文本编码,使用文本软件进行编辑;

b)能够对明文文本进行简单的处理,只能防肉眼,就是一个君子加密方式。

最重要的特点

1.便于网络传输。

2.不可见性。

Base 64 Encoding有什么用?举个简单的例子,你使用SMTP协议 (Simple Mail Transfer Protocol 简单邮件传输协议)来发送邮件。因为这个协议是基于文本的协议,所以如果邮件中包含一幅图片,我们知道图片的存储格式是二进制数据(binary data),而非文本格式,我们必须将二进制的数据编码成文本格式,这时候Base 64 Encoding就派上用场了。

Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。它使用下面表中所使用的字符与编码。

而且base64特别适合在http,mime协议下快速传输数据。

X.509公钥证书也好,电子邮件数据也好,经常要用到Base64编码,那么为什么要作一下这样的编码呢?

我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

如一个xml当中包含另一个xml数据,此时如果将xml数据直接写入显然不合适,将xml进行适当编码存入较为方便,事实上xml当中的字符一般都是可见字符(0-127之间),但是由于中文的存在,可能存在不可见字符,直接将字符打印在外层xml的数据中显然不合理,那么怎么办呢?
可以使用base64进行编码,然后存入xml,解码反之
其实还有个办法,将byte的值写在xml当中,空格或者,分开,这样也可以将byte数据传入,不过这样更浪费空间,并且不易保存.

比如http协议当中的key value字段的值,必须进行URLEncode ,因为一些特殊符号(等号或者空格)是有特殊含义的,造成混淆,解析失败,那么需要把这些值统一处理为可见字符,传输完再解析回来。

base64编码,原理是什么,有什么作用?相关推荐

  1. 5分钟学会Base64编码原理

    Base64编码原理 一.前言        相信很多开发的小伙伴当听到 Base64的时候,都会误认为是它一种加密解密的算法.        其不然,Base64其实是一种编码格式,其作用:解决乱码 ...

  2. base64编码_几分钟看懂Base64编码原理

    Base64简介 Base64是基于64个可打印字符(小写字母a-z,大写字母A-Z,数字0-9,符号"+","/" 再加上作为垫字的"=" ...

  3. Base64 编码原理及代码实现

    Base64 编码原理及代码实现 所谓 base64 编码就是从 ASCII 码表中选取64个可打印字符(A-Za-z0-9+/)作为基本字符集对其它字符进行编码转换.加上作为填充的 "=& ...

  4. 密码学-编码算法:Base64编码原理和使用

    1.Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.Base64编码是从二进制到字符的过程,可用于在 ...

  5. Base64编码原理与实现

    Base64编码的原理是按bit将每6个bit转换成Base64编码表中的相应字符.下面是Base64的编码表: 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 1 ...

  6. Base64编码原理与应用

    本文内容转自网络,如需详细内容,请参考相关网址. http://my.oschina.net/goal/blog/201032 代码参考:http://blog.csdn.net/prsniper/a ...

  7. 一文轻松明白 Base64 编码原理

    把图片丢进浏览器,打开sources能看到一长串字符串,这是图片的Base64编码.这一长串编码到底是怎么生成的呢? 我们接下来探索一下base64编码的原理 Base64 名称的由来 Base64编 ...

  8. C++安全方向(二):2.3 base64编码原理讲解

    我们目前的编码可以理解为base256 4位是0-16 6位是0-63,能表示我们的base64,所以base64我们是取6位表示一个字节.

  9. base64编码原理+源码

    看一下Base64的索引表,字符选用了"A-Z.a-z.0-9.+./" 64个可打印字符.数值代表字符的索引,这个是标准Base64协议规定的,不能更改.64个字符用6个bit位 ...

  10. Base64编码的原理与常用实现

    这篇主要是为了后面好介绍加密算法,做的铺垫. 这个是基础,什么是一个程序员的涵养,这些基础就是涵养. 平时可能用不到,但必须得会. 如果连这个原理都说不上来,就别玩王者荣耀绝地求生英雄联盟和平精英了, ...

最新文章

  1. 2018-2019-2 20165315 《网络对抗技术》Exp2+ 后门进阶
  2. linux telnet localhost 25,telnet localhost 25 没反应. 大家帮忙看下什么问题...
  3. java 中的点_java————形参中的点点点 | 学步园
  4. NOIP 2016(不是游记)
  5. 抓包分析360浏览器和360搜索配对使用的安全性-WEB服务端分析
  6. 利用rancher轻松构建pass平台
  7. 处理机调度之时间片轮转调度算法实现
  8. 使用C语言写入word文档 C语言编程基础
  9. Win11磁盘清理怎么没有了?Win11磁盘清理在哪打开?
  10. 进入虚拟机的任务管理器命令
  11. 分类计数原理与分步计数原理_《分类加法计数原理与分步乘法计数原理》教学设计...
  12. afterlogic webmail lite php,AfterLogic WebMail最新版任意文件包含 | CN-SEC 中文网
  13. 微信小程序01---小程序初始
  14. 5 分钟,带你了解MVP(最低可行性产品)
  15. CBAM——即插即用的注意力模块(附代码)
  16. 在UE4里调取实时网络监控视频画面以及直播网络电视
  17. android自制拨号器
  18. TDA4 整理一些资料
  19. AHK 实现中英文输入法自由
  20. 想知道怎么修复老照片?来试试这几款修复软件

热门文章

  1. 1.socket网络编程
  2. 使用chart.js 制作图表
  3. LinuxC——指针
  4. JavaScript图片轮播图
  5. QT实现ping功能
  6. 提高带宽利用率!为什么要Pacing?
  7. 长期:如何找到适合自己的节奏?
  8. C++基本功和 Design Pattern系列 Operator 下
  9. 步进电机的抖动和噪音从何而来 如何使步进电机完全静音
  10. 【web安全学习篇1】VBS脚本基础编写总结