Base64编码过程详解
一,Base64是什么(原理比较难理解,可参考下面的实践 )
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中存储复杂数据。
二,原理
Base64可以将ASCII字符串或者是二进制编码成只包含A—Z,a—z,0—9,+,/ 这64个字符( 26个大写字母,26个小写字母,10个数字,1个+,一个 / 刚好64个字符)。这64个字符用6个bit位就可以全部表示出来,一个字节有8个bit 位,那么还剩下两个bit位,这两个bit位用0来补充。其实,一个Base64字符仍然是8个bit位,但是有效部分只有右边的6个 bit,左边两个永远是0。
Base64的编码规则是将3个8位字节(3×8=24位)编码成4个6位的字节(4×6=24位),之后在每个6位字节前面,补充两个0,形成4个8位字节的形式,那么取值范围就变成了0~63。又因为2的6次方等于64,所以每6个位组成一个单元。
三,步骤
- 第一步,将汉字转为二进制
- 第二步,将上面的二进制转为每6个一组。
- 第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
- 第四步,根据Base64编码表获得对应的值。
四,实践
随便找两个汉字然后转为十进制,这里我选的汉字是“编码”,我们可以看到它们的编码分别为 编: 45536 码:49899
然后我们将这两个十进制准换为二进制
45536 1011000111100000
49899 1100001011101011开始将他们分割为6个一组10110001111000001100001011101011
101100
011110
000011
000010
111010
110000最后一位不足6位则进行补零然后在每组前面加两个零变成8位字节的形式
00101100
00011110
00000011
00000010
00111010
00110000准换回十进制
44
30
3
2
58
48参照Base64编码表找到对应编码他们分别对应 s e D C 6 w
测试(http://web.chacuo.net/charsetbase64)
结果:
用JAVA代码测试:
<完>
Base64编码过程详解相关推荐
- 01_什么是one-hot编码、one-hot编码过程详解、为什么需要one-hot编码?one-hot编码的优缺点、使用sklearn中的API举例
以下资料来自:网络+最后的整合 https://www.cnblogs.com/shuaishuaidefeizhu/p/11269257.html https://www.cntofu.com/bo ...
- Base64编码知识详解
在我们进行前端开发时,针对项目优化,常会提到一条:针对较小图片,合理使用Base64字符串替换内嵌,可以减少页面http请求. 并且还会特别强调下,必须是小图片,大小不要超过多少KB,等等. 那么,B ...
- lzw编码过程详解_编码拓展——封装、编码、码率
有小伙伴想要更多知道编码封装这一块 那就继续写写吧 什么是封装?什么是编码 不知道大家有没有试过 "明明都是 mp4,为什么这个能够导入剪辑软件,那个则不能?"的情况. ok,下面 ...
- 【通信原理 入坑之路】—— 信息论部分 离散无记忆信源的不等长编码 之 霍夫曼编码过程详解
还记得在上一篇博客中,我们讨论的离散无记忆信源的等长编码吗,我们最后得到的结论是 -- 如果使用等长编码,那么对典型序列编码的编码效率是最高的.然而,要满足较高的编码效率,同时还要保证误码率的情况下, ...
- Huffman 编码原理详解(代码示例)
1.概述 huffman编码是一种可变长编码( VLC:variable length coding))方式,于1952年由huffman提出.依据字符在需要编码文件中出现的概率提供对字符的唯一编码 ...
- Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略
Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...
- xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程)
xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程) 注:本文通过研究各种情况下实体编码和JS编码是否生效,进而总结了哪些情况下能够进行编码后,javascript代码依然能够正常执行. 解 ...
- Android签名机制之---签名验证过程详解
一.前言 今天是元旦,也是Single Dog的嚎叫之日,只能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是如何验证一个Apk的签名.在前一篇文章中我们 ...
- base64加密原理详解及C语言源码
base64加密原理详解 Base64从本质来说,其实并不是加密算法,只是一种编码方式而已,Base64的"加解密"也不叫加密解密,而是编码解码,但是现在一般都把它归为加密算法. ...
最新文章
- 获取网站Alexa排名数值的方法
- Apriori关联规则算法
- socket 编程 基于 select 实现的回射客户端/服务程序
- AcWing 95. 费解的开关(指数型枚举)
- 不宜使用Selenium自动化的10个测试场景
- 蓝牙avrcp协议源码分析
- 对称 symmetric
- 瑞友天翼服务器系统资源不足,瑞友天翼问题处理
- WEBMAX功能简述
- Android热更新方案Robust——美团热更新(热修复)使用介绍
- 香农采样定理(奈奎斯特采样定理)
- bat文件(实现批量处理)
- trove mysql 镜像_openstack trove 数据库镜像构建列表
- 【学习笔记】ROS-移动机器人导航相关
- java过滤特殊字符,只留下字母、数字和汉字
- iOS12.1.3~12.2可以越狱了,附iOS12.1.3~12.2越狱教程,以及下载地址
- HCIA(华为体系初级网络安全工程师)(第二天)
- Java SE基础知识详解第[13]期—不可变集合、Stream流、异常
- 计算机博士发几篇论文可以毕业,发SCI论文到底有多难,硕士博士毕业一般能有几篇...
- 以微信小程序相册为例,看Serverless DevOps最佳实践
热门文章
- 我欲凌风,只为寻常梦
- 西加云杉700E设备AAA认证之移动设备的上下线操作
- oracle rman 00571,oracle 备份失败 RMAN-03002,RMAN-00569,RMAN-00571等处理方法
- linux调用百度接口ocr快速准确提取图片中文字
- C++数据结构与算法之二叉树中序遍历
- 苹果手机变成耳机模式怎么调回来_苹果耳机模式怎么调回来
- 《深入理解JAVA虚拟机》详细解读(第二章 ):JAVA内存区域与内存溢出异常
- 14%网民在网上预订火车票 9%网购机票
- 燃尽图,甘特图,鱼骨图
- BEVDet/BEVDepth/BEVFormer/BEVFusion各有什么优缺点?