首页 > 其他分享 >一篇文章彻底搞懂base64编码原理

一篇文章彻底搞懂base64编码原理

时间:2022-11-16 19:04:10浏览次数:62  
标签:编码 Base64 字符 二进制 base64 搞懂 个字符

开始

在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了解一下Base64的底层实现。

base64是什么东东呢?

Base64编码是网络上常见的用于传输8bit字节数据的一种编码方式之一,所以可以依据概括:它是一种编码方式,记住它不是加密的方式,它没有秘钥的概念,任何人拿到数据都能解析出来。它只是一种编码方式!!

到底哪些地方会使用?

我们在参数传输的过程中肯定遇到过这样一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。

实现原理

它的来龙去脉我们是知道了,但它的原理我们还不知道,那下面我们就来彻底搞懂它。

Base64编码将一个8位子节序列拆散为6位的片段,而且这每个6位的片段都会被分配一个字符,那这个是个什么字符呢?其实它是base64字母表中的64个字符之一,所以顾名思义base64了。而这64个字符可是有讲究的,是选择了最常用而且兼容性最好的64个字符。所以可以算出base64编码后的字符串大约比编码前大了33%,因为用8位来表示6位。下面的详细的例子,大家来感受下。

Base64还有几个规则如下:

①.3字符变为4字符。

②每76个字符增加一个换行符。

③.结束符也要编码。

例子

加入编码前的数据是“Ow!”,那编码之后是4个字符的base64编码值“T3ch”。下面是具体的转换过程。

  • 1, 字符串"Ow!"被拆分成3个8位的字节(0x4F、0x77、0x21)。看下图:

 

  • 2, 这3字节构成了一个24位的二进制 01001111 ,01110111 ,00100001。看下图:

 

  • 3, 这些为被划分为一些6位的序列010011、110111、011100、1000001。看下图:

 

  • 4, 每6位值都表示了从0~63数值,在base64字母表中的都有对应的字符。所以查表转换得出是4字符的字符串“T3ch”。如下图所示转换表。

 

整个过程就over了,就是这么简单,大家理解了吗?

总结

大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串。与常规恰恰相反,

Base64编码主要用在传输、存储、表示二进制领域,不能算得上加密,只是无法直接看到明文。也可以通过打乱Base64编码来进行加密。

中文有多种编码(比如:utf-8、gb2312、gbk等),不同编码对应Base64编码结果都不一样。




标签:编码,Base64,字符,二进制,base64,搞懂,个字符
From: https://blog.51cto.com/u_15707676/5857009

相关文章

  • 彻底把 MySQL的锁搞懂
       最近,同事在生产上遇到一个MySQL死锁的问题,于是在帮忙解决问题后,特意花了一周的时间,把MySQL所有的锁都整理了一遍,今天就来一起聊聊MySQL锁。申明:本文基于M......
  • XML指南——XML编码
    XML文档可以包含外文字符比如挪威语或者法语(中文当然也可以!这一部分还是不能照原文翻译,下面有些内容是我自己写的)为了让你的解析器能够明白这些字符,你必须在XML文档中统一的......
  • Visual Studio C++ 默认 UTF-8 编码及 *.editorconfig 统一代码格式
    ​转载请注明原文链接:https://www.cnblogs.com/mechanicoder/p/16894144.html1.问题由来背景:团队使用VisualStudio进行跨平台项目开发。遇到的问题:编码:Windows......
  • C#编码规范
    为什么要规范编码?方便维护、便于阅读和理解代码。注释所有的方法和函数都应该在前面添加注释,表明方法用来干什么。当参数的功能不明显时、过程希望参数在......
  • 一文搞懂docker安装Jenkins,从gitee上面拉取代码.部署到另一台服务器支持版本回退
    1.前言通过docker安装Jenkins,从gitee上面拉取代码.部署到另一台服务器,并用docker启动.达到一键式构建的目标扩展功能.1.支持版本回退.2.限制版本数量,超出自动清理2......
  • 一文彻底搞懂volatile用法
    一、常见说法volatile关键字和const对应,一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声......
  • 常见编码的学习
    一:基本知识   1:bit最小的单元字节byte机器语言的单位1byte=8bits1KB=1024byte1MB=1024KB1GB=1024MB   2:二进制 binary八进制 octal十进制 decim......
  • 彻底搞懂nodejs事件循环
    nodejs是单线程执行的,同时它又是基于事件驱动的非阻塞IO编程模型。这就使得我们不用等待异步操作结果返回,就可以继续往下执行代码。当异步事件触发之后,就会通知主线程,主线......
  • 解决 vue 项目一直出现 sockjs-node/info?t=1554978**** ,并造成浏览器不能及时更新编
    首先sockjs-node是一个JavaScript库,提供跨浏览器JavaScript的API,创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。服务端:sockjs-node(https://github.com/......
  • 一张图彻底搞懂Spring循环依赖
    1什么是循环依赖?如下图所示:BeanA类依赖了BeanB类,同时BeanB类又依赖了BeanA类。这种依赖关系形成了一个闭环,我们把这种依赖关系就称之为循环依赖。同理,再如下图的情况:......