Base64编码

一、什么是BASE64编码

在了解BASE64编码之前,首先回顾一下ASCII码:

  • ASCII码:

ASCII(American Standard Code for Information Interchang)漂亮国信息交换标准代码。
ASCII 码使用7个二进制位来表示一个字符,7个二进制位刚好可以表示 128 ( 27 = 128)个不同的字符。
image.png
包括了大小写字母、数字、标点符号 和一些不可见的控制符号。《ASCII码表》:
trick-6-2.jpg
注:表中的ASCII字符可以用 “ Alt + 小键盘上的数字键 ”输出对应的ASCII 符号。

  • BASE64:

Base64编码和我们熟悉的ASCII码一样,也是一种编码方式。而BASE64使用 **6个二进制位 **来表示一个字符。6个二进制位刚好可以表示64个(26=64)不同的字符;这也是BASE64编码名称的由来。

7dc0023d1122924b88c8a21199612e1d.png
这些字符包括26个大写字母、26个小写字母、10个数字以及加号(+) 和斜线(/)两个特殊字符。

  • 转换示例:
  1. 在命令行终端,使用echo 命令输出一个字符串:echo "HelloWorld"

echo 命令的作用:是把我们输入的内容在原封不动地输出到终端上,经常会被用来在脚本中输出一些提示信息。

image.png

  1. 然后我们在这个命令的后面在加上一个竖线 echo "HelloWord" | base64

“|”符号的作用:它是一个管道符号,作用是将前面命令的输出作为后面命令的输入。将像一个管道一样,把数据从前面的命令传递给后面的命令,这样就可以把这两个命令串起来使用。

image.png

二、BASE64编码的原理和过程

2.1 转换编码对象为二进制

首先第一步是把要编码的字符串转换成二进制的形式
image.png
比如我们要编码 HelloWorld 的这个字符串,首先是需要将它转换为二进制形式:
这里的第一个字符大写字母的H的ASCII编码是72,对应的二进制是 01001000;
第二个字符e的ASCII编码是101, 对应的二进制位是 01100101 等等。image.png
然后把这些二进制位按照从左到右的顺序排列起来,就得到这个字符串的二进制形式。

2.2 以6位为单位分组

将这个二进制的字符串按照 每6位一组 来分组。
image.png
如上图所示 第一组就是 010010,第二组就是 000110依次类推。

**注意: **如果最后一组的二进制位不足6位的情况下,就用0来补齐。

image.png
比如这里的最后一组的二进制位就只有4位,那么剩下的两位就用0来补齐。

2.3 转换成十进制并映射

第三步就是将每一组的二进制位转换成十进制的数字,在到Base64 编码表中找到对应的字符。
image.png
比如第一组的 010010 转换成十进制的数字 就是18,对应是字符就是大写字母S;
第二组 000110 转换成十进制的数字就是6 ,对应的字符就是大写字母G 等等。
这样就可以得到了编码之后的结果:
image.png

**注意:**在编码之后的长度需要是 **4的倍数 **如何不是的话,就需要在结尾的位置用等号来补齐

比如这里HelloWord 编码之后的长度是15个字符,不是4的倍数,那么久需要在最后补上一个等号,使它的长度变成16个字符,所以最后的结果就变成了之前在命令行终端中看到的样子。
image.png


以上就是整个编码过程。
相应的 解码的过程也就是把编码的过程反过来就可以了。
类似的除了Base64 编码之外,还要Base32编码、Base16编码等等。image.png
原理都是一样的,只不过使用的二进制位数和编码表不同而已。

三、BASE64编码应用场景

由于Base64编码可以把任意的二进制数据转换成 **可打印的ASCII字符 **这样就可以方便的传输或者存储这些数据,所以被广泛应用在电子邮件、URL传递、数据存储等等场景中。

  • 应用场景:
    • 电子邮件附件
    • URL参数传递
    • 数据传输和存储
    • Json Web Token(JWT)
    • KubernetesI(Secret)
    • 图像数据嵌入

以电子邮件传输为例,我们在发送邮件的时候,邮件的内容是以文本的形式传输的,如果邮件中包含了二进制数据,比如附件中的图片、视频、音频等等,那么这些二进制数据就需要经过Base64编码之后才能被传输。再比如安全领域中的JWT令牌、RSA数字签名等等都使用到了Base64编码。

Base64编码只是一种编码方式,并不是加密,它并不能够提供数据的保密性,所有的数据都是以明文的形式存储的,任何人都可以通过Base64编码的方式来解码得到原始的数据,所有如何你的数据需要保密的话,还是需要使用一些其它的加密算法来保证数据的安全性。

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值