记录---base64

简介: 什么是Base64呢? Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。

      什么是Base64呢?

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

       简单的了解了一点有关Base64.

一、编码规则
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。

例:将对ABC进行BASE64编码:

1、首先取ABC对应的ASCII码值。A(65)B(66)C(67);
2、再取二进制值A(01000001)B(01000010)C(01000011);
3、然后把这三个字节的二进制码接起来(010000010100001001000011);
4、 再以6位为单位分成4个数据块,并在最高位填充两个0后形成4个字节的编码后的值,(00010000)(00010100)(00001001)(00000011),其中蓝色部分为真实数据;

5、再把这四个字节数据转化成10进制数得(16)(20)(9)(3);
6、最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D),这里的值实际就是

数据在字符表中的索引。

注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

这是昨天晚上群里问了一个面试的问题,就是有关Base64解码的。当时看着一堆乱七八糟的数字字母符号,完全不知道是什么。下来就简单的了解了解!

可以看看这篇文章 http://www.ruanyifeng.com/blog/2008/06/base64.html

相关文章
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
|
6月前
|
存储 前端开发 JavaScript
前端base64转file文件方法
前端base64转file文件方法
666 0
|
缓存 Go
Go --- for range会使通道中的缓存值被取出
Go --- for range会使通道中的缓存值被取出
Go --- for range会使通道中的缓存值被取出
|
监控 Java Apache
Info 内容创建|学习笔记
快速学习 Info 内容创建
Info 内容创建|学习笔记
|
SQL 存储 Java
关于PageHelper何时执行select count(0) from xxx查询?(结论+源码Debug分析)
关于PageHelper何时执行select count(0) from xxx查询?(结论+源码Debug分析)
关于PageHelper何时执行select count(0) from xxx查询?(结论+源码Debug分析)
|
C++ 容器
set以及使用举例--C++基础
set以及使用举例--C++基础
147 0
set以及使用举例--C++基础
|
Serverless
info 查看应用信息
info 查看应用信息
216 0
|
Oracle 关系型数据库 数据库