返回顶部
首页 > 资讯 > 精选 >Go语言中的Base64编码原理以及使用是怎样的
  • 614
分享到

Go语言中的Base64编码原理以及使用是怎样的

2023-06-28 23:06:07 614人浏览 薄情痞子
摘要

今天就跟大家聊聊有关Go语言中的Base64编码原理以及使用是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言在网络中传递参数时,我们经常会对参数进行Base64编码,那么G

今天就跟大家聊聊有关Go语言中的Base64编码原理以及使用是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

    前言

    网络中传递参数时,我们经常会对参数进行Base64编码,那么Go 语言中如何进行Base64编码呢?Base64编码的原理是怎样的呢?

    Go Base64编码

    标准Base64编码

    // 标准Base64编码    src := "hello world"    res := base64.StdEncoding.EncodeToString([]byte(src))    fmt.Println(res) // aGVsbG8gd29ybGQ=    // 标准Base64解码    s, err := base64.StdEncoding.DecodeString(res)    fmt.Println(string(s), err) // hello world <nil>

    Base64 URL 编码

    标准Base64编码后会有 &lsquo;+&lsquo;号,在Http URL传输时,'+&lsquo;号会被解析成空格,这样服务端接收到的数据和传输的数据就不一致。因此衍生出了Base64 URL编码,这种编码会把&rsquo;+&lsquo;变为&rsquo;-',便于在URL中传输。

    因此如果想要将编码后的数据放在 HTTP URL中传输,应该使用该编码方式。

    // Base64 URL 编码src := "信息"res := base64.URLEncoding.EncodeToString([]byte(src))fmt.Println(res) // 5L-h6oGv// Base64 URL 解码s, err := base64.URLEncoding.DecodeString(res)fmt.Println(string(s), err) // 信息 <nil>

    什么是Base64编码

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。&mdash;百度百科

    通过百度百科的介绍,我们可以获得如下信息:

    • Base64是一种编码方式,将二进制编码为字符

    • Base64编码后的字符范围为64个可打印字符

    • 编码后的结果具有不可读性,需要解码:即Base64不是加密方法,而是编码方式,是从一种语言翻译为另一种语言,当然也可以翻译回去

    为什么需要Base64编码

    我们都知道计算机的世界,是由0和1组成的,那么0和1的组合如何表示现实语言呢,这就出现了ASCII 码。ASCII 是由美国设计的,一共128个字符,其中规定了第0~31及127(共33个)是控制字符或通信专用字符,32~126(共95个)是可打印字符。比如10(0000 1001)表示换行,65(0100 0001)表示大写字母A。

    最初的许多协议都是基于 ASCII 设计的,只能传输可打印字符。比如发邮件时使用的 SMTP(简单邮件传输协议),最初只能传输纯文本,对图片、语音等二进制文件的支持并不是太好。

    那么我们想传输这些包含不可打印字符的数据怎么办,一种方式就是设计一种编码方式,将不可打印字符转为可打印字符,这样这些数据就可以传输了,收到这些数据后,再解码回来,得到原始数据。Base64就是为了解决这个问题的。

    对于现在的协议来说,都针对二进制文件做了处理,但我们无法保证文件在网络传输过程中不出现问题。当包含不可打印字符的文件在网络中传输时,往往要经过多个路由设备,由于不同的设备(特指老的路由设备)对字节流的处理方式有一些不同,这样那些不可打印字节就有可能被错误处理,不利于数据传输的。所以就先把数据先做一个编码,统统变成可见字节,确保数据可靠传输。

    Base64编码原理

    Base64之所以叫做Base64,是因为它是基于64个可打印字符设计的,这64个字符是 ASCII 编码中可打印字符的子集,包含26个字母的大小写、10个阿拉伯数字、'+&lsquo;号 和 &lsquo;/&lsquo;号。(其实还有一个 &lsquo;=&rsquo; 号用于后缀)

    Go语言中的Base64编码原理以及使用是怎样的

    编码步骤

    由于一共有 64 个字符,那么使用 6 个比特位就足够表示了(2的6次方=64),而 ASCII码 使用 8 个比特位表示一个字符,6 和 8 的最小公倍数为 24,3个 ASCII码 字符可以编码为 4 个 Base64 字符。因此Base64的编码过程如下:

    1. 将原始数据每三个字节分为一组,一共24个比特位

    2. 将24个比特位分为4组,每组6个比特位

    3. 计算每组的十进制值,根据编码对照表,得到可打印字符串

    以维基百科上举的例子做个演示:

    1. 给定单词 &lsquo;Man&rsquo;,一共三个字节

    2. 根据ASCII编码,得到24个比特位

    3. 6个一组,分为4组

    4. 计算每组的十进制值分别为 19、22、5、46,对照Base64编码表,得到可打印字符串为 &lsquo;TWFu&rsquo;

    Go语言中的Base64编码原理以及使用是怎样的

    需要注意的是,使用Base64编码后,3个字节会转为4个字节,编码后的需要传输的数据比编码前多了 1/3。

    位数不足情况

    位数不足会有两种情况:两个字节或者一个字节的数据。

    如果是两个字节,也就是16个比特,需要补两个0,得到三个Base64编码字符,最后添加一个&rsquo;=&lsquo;用于补充

    Go语言中的Base64编码原理以及使用是怎样的

    如果是一个字节,也就是8个比特,需要补4个0,得到两个Base64编码字符,最后添加两个&rsquo;=&lsquo;用于补充

    Go语言中的Base64编码原理以及使用是怎样的

    Base64解码原理

    解码就是编码的逆向操作:

    1. 去掉结尾的&rsquo;=&lsquo;号

    2. 根据Base64编码表,找到每个字符对应的编码值

    3. 取每个编码值的后6位,形成二进制串

    4. 对上述二进制串,每8个构成一个字节,如果最后一组不够8个,一定全是0,丢弃掉

    5. 此时得到的就是原始数据的二进制编码,再根据编码方式(例如 ASCII )等进行解码

    例如对于上述 &lsquo;Ma&rsquo; 的编码值 &lsquo;TWE=&rsquo; 进行解码:

    1. 去掉&rsquo;=',得到 &lsquo;TWE&rsquo;

    2. &lsquo;T&rsquo;:19,&lsquo;W&rsquo;:22,&lsquo;E&rsquo;:4

    3. 010011 010110 000100

    4. 01001101 01100001

    5. M a

    Base64标准编码变种

    我们有时候会将Base64编码后的字符串,当前 HTTP URL 中的参数进行传递,但是标准的 Base64 并不适合直接放在URL里传输,因为对于 &lsquo;+&lsquo;号,使用url encode时会被encode 为空格,比如编码后的值是 &lsquo;ab+cd&rsquo;,但是使用url encode 后变成了 &lsquo;ab cd&rsquo;,那么对方接收到的也是&rsquo;ab cd&rsquo;,此时再解码肯定失败了。

    为解决此问题,衍生出一种用于URL的改进Base64编码,它不仅在末尾去掉填充的&rsquo;=&lsquo;号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”。

    看完上述内容,你们对Go语言中的Base64编码原理以及使用是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

    --结束END--

    本文标题: Go语言中的Base64编码原理以及使用是怎样的

    本文链接: https://lsjlt.com/news/321461.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Go语言中的Base64编码原理以及使用是怎样的
      今天就跟大家聊聊有关Go语言中的Base64编码原理以及使用是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言在网络中传递参数时,我们经常会对参数进行Base64编码,那么G...
      99+
      2023-06-28
    • Go语言中的Base64编码原理介绍以及使用
      目录前言Go Base64编码什么是Base64编码为什么需要Base64编码Base64编码原理编码步骤位数不足情况Base64解码原理Base64标准编码变种总结前言 在网络中传...
      99+
      2024-04-02
    • 使用Go语言文档中的encoding/base64.StdEncoding函数实现Base64编码
      Base64编码是一种将原始数据转换成可读字符串的编码方法,在计算机网络中广泛应用。在Go语言中,可以使用encoding/base64.StdEncoding函数来实现Base64编码,具体代码示例如下:package main imp...
      99+
      2023-11-03
      Go语言 encoding/base StdEncoding
    • JavaScript中的base64编码原理是什么
      今天小编给大家分享一下JavaScript中的base64编码原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。bas...
      99+
      2023-07-05
    • 使用Go语言文档中的encoding/base64.URLEncoding函数实现URL安全的Base64编码
      URL安全的Base64编码是一种将二进制数据转换为可在URL中传输的字符形式的编码方法。在这篇文章中,我们将使用Go语言中的encoding/base64.URLEncoding函数来实现URL安全的Base64编码。在开始之前,我们需要...
      99+
      2023-11-04
      Go语言 URL安全 Base编码
    • Go语言是怎样的一种编程语言?
      Go语言是一种由Google开发的开源编程语言,也被称为Golang。它的设计目标是提高开发人员的工作效率,同时保持高性能和可靠性。Go语言的设计借鉴了许多其他编程语言的优点,包括静态...
      99+
      2024-03-07
      静态类型 速度快 并发强 go语言 标准库
    • InnoDB Redo Log的设计原理以及源码是怎样的
      本篇文章为大家展示了InnoDB Redo Log的设计原理以及源码是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。这篇文章主要学习 InnoDB Redo ...
      99+
      2024-04-02
    • 详解Go语言中Goroutine退出机制的原理及使用
      目录退出方式进程/main函数退出通过channel退出通过context退出通过Panic退出等待自己退出阻止goroutine退出的方法通过sync.WaitGroup通过cha...
      99+
      2024-04-02
    • go语言以包组织代码的原因是什么
      这篇文章主要介绍了go语言以包组织代码的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言以包组织代码的原因是什么文章都会有所收获,下面我们一起来看看吧。原因:将程序所有的代码都放入一个源码文件是...
      99+
      2023-07-04
    • nodejs和go语言的web server编程是怎样的
      这期内容当中小编将会给大家带来有关nodejs和go语言的web server编程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。nodejs用nodejs现成的express module,几行代...
      99+
      2023-06-02
    • informix高可用中HDR的原理及使用是怎样的
      本篇文章给大家分享的是有关informix高可用中HDR的原理及使用是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
      99+
      2024-04-02
    • Mysql的复制原理以及过程是怎样的
      本篇文章为大家展示了Mysql的复制原理以及过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Mysql的复制原理以及流程 (1)复制的基本原理流程,3个...
      99+
      2024-04-02
    • Go语言中熔断的原理是什么
      本篇内容介绍了“Go语言中熔断的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!今天我们就来一起看...
      99+
      2024-04-02
    • Go语言中的Path索引文件:是什么,以及如何使用?
      在Go语言中,Path索引文件是一个非常重要的组件,它可以帮助我们快速地查找文件和目录,提高我们的开发效率。本文将介绍Path索引文件的概念、作用,以及如何在Go语言中使用。 一、什么是Path索引文件? Path索引文件是一个特殊的文件...
      99+
      2023-10-05
      path 索引 文件
    • 详解Python中使用base64模块来处理base64编码的方法
      base64模块是用来作base64编码解码的。这种编码方式在电子邮件中是很常见的。 它可以把不能作为文本显示的二进制数据编码为可显示的文本信息。编码后的文本大小会增大1/3。 闲话不说了,base64模块...
      99+
      2022-06-04
      详解 模块 方法
    • C语言中if语句的使用是怎样的
      本篇文章给大家分享的是有关C语言中if语句的使用是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。if语句:作用:构成分支结构。(它根据给定的条件进行判断,以决定执行某个分...
      99+
      2023-06-29
    • turtle库的安装以及原理分析是怎样的
      这篇文章给大家介绍turtle库的安装以及原理分析是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。turtle库是Python中一个很流行的绘图函数库,主要是依据坐标轴来绘制图像,画笔则是一只小海龟,通过控制海龟...
      99+
      2023-06-02
    • Go defer 原理和源码剖析是怎样的
      本篇文章为大家展示了Go defer 原理和源码剖析是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Go 语言中有一个非常有用的保留字 defer,它可以调用一个函数,该函数的执行被推迟到包裹...
      99+
      2023-06-25
    • History是基本原理及使用方法是怎样的
      这期内容当中小编将会给大家带来有关History是基本原理及使用方法是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。当我们频繁使用 Linux 命令行时,有效地使用历史记录,可以大大提高工作效率。在...
      99+
      2023-06-15
    • Go语言中goroutine的调度原理是什么
      Go语言中goroutine的调度原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、关于并发的基础知识在讲gorou...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作