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编码的方式来解码得到原始的数据,所有如何你的数据需要保密的话,还是需要使用一些其它的加密算法来保证数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

推荐系统学习笔记(一)

A/B测试 随机分桶--哈希函数随机分 如果某个实验组指标明显优于对照组,则值得推全 分层实验 问题:流量不够用怎么办? 同层互斥----避免一个用户被两个实验影响 不同层正交----每层独立随机分配用户 为什么不能全都用正交? 同…

1060 爱丁顿数(测试点5)

solution1(测试点5不通过) 所谓“E天骑行超过E公里”,注意没有要求是第E天 对于直接判断变成了第E天骑行距离超过E公里,曲解了题意 例如对于 3 1 2 3输出为1 第1天骑行3公里,满足条件;第2天骑行2公里&…

图像数据集可视化查看代码

1 数据集 数据集为10分类问题 2 数据集可视化代码 注意事项: cv2.imread()函数中的路径不能包括中文,否则无法正常读取。 import matplotlib.pyplot as plt import matplotlib.image as mpimg from mpl_toolkits.axes_grid1 import ImageGridimport…

八大设计模式:适配器模式实现栈的泛型编程 | 通用数据结构接口的秘诀(文末送书)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…

如何在阿里云申请免费SSL证书(三个月有效)

SSL证书主要用于建立Web服务器和客户端间可信的HTTPS协议加密链接,以防止数据在传输过程中被篡改,避免信息泄露。阿里云提供了多种品牌和类型的SSL证书,以满足不同用户的需求。您可以根据自己的预算、域名类型以及网站类型,选择购…

蓝桥杯练习系统(算法训练)ALGO-941 P0601字符删除

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 编写一个程序,先输入一个字符串str(长度不超过20),再输入单独的一个字符ch&#xff0c…

45.WEB渗透测试-信息收集-域名、指纹收集(7)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:计算机王-CSDN博客 WEB指纹:Web指纹也叫web应用指纹。由于所使用的工具、技术…

【全开源】国际版JAVA多商户运营版商城系统源码地摊兄源码多商户源码社交电商源码支持Android+IOS+H5

国际版多商户运营版商城系统:打造全球电商新生态 随着全球化趋势的深入发展,跨境电商已成为推动世界经济增长的重要力量。为了满足不同国家、地区商户的多样化需求,我们隆重推出“国际版多商户运营版商城系统”,旨在为全球商户搭…

智能监控与安全管理:安全帽检测算法的实践与应用

在工地、煤矿等高危工作环境中,安全帽的佩戴至关重要。安全帽能够有效防止因坠落物体或碰撞等引起的头部伤害,从而保护工作人员的生命安全。然而,传统的检查人员佩戴安全帽的方式主要依赖于现场监督和巡查,这种方法不仅耗费大量人…

Linux修炼之路之gcc/g++,动静态链接及动静态库

目录 一:Linux编译器-gcc/g 预处理-编译-汇编-链接 1.预处理 2.编译 (生成汇编) 3.汇编(生成机器可识别代码) 4.链接(生成可执行文件或库文件) 三:动静态链接和动静态库 动静态库 动静态链接 1.动态链接 2.静态链接 3.注意点 4.各自优缺点 5.ldd和fil…

杀杀杀杀杀杀杀杀杀

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 …

GRFB-UNet:一种新的多尺度注意力网络,用于铺路分割

不同场景下的带注释的触觉铺装示例: GRFB-UNet网络结构: GRFB模块的结构: 铺路在视障人士的旅行中起着至关重要的作用。因此,识别铺装的形状和位置以支持视障人士的移动性是相当有意义的,而视觉分割技术就适合这项任务。为了有效提高触觉铺装分割的精度和鲁棒性,…

Netty核心组件介绍

Netty是一款用于创建高性能网络应用程序的高级框架。Netty的核心组件如下: Channel回调Future事件和ChannelHander Channel channel是Java NIO的一个基本构造。可以把Channel看作是传入或传出数据的载体。它可以被打开或关闭,连接或断开连接。 回调 …

揭秘抖音快速涨10000有效粉的方法——巨量千川投流打造真实粉丝快速增长

随着短视频平台的流行,越来越多的用户开始在抖音上展示自己的才艺和生活。然而,在这个庞大的用户群体中如何迅速地涨粉成为了抖友们普遍关注的问题。今天,我们将揭秘一种被全网搜索的抖音快速涨粉方法——巨量千川投流,官方真实流…

揭秘!你的电商产品为何滞销?同行火爆销售的7大原因!

同样做电商,但自家产品销量不如竞对同行,可能的原因有多种,以下是店雷达总结7个可能的原因和对策: 一、市场竞争分析不足 未能准确识别并分析竞争对手的产品、定价、营销策略等关键信息,导致自身产品无法脱颖而出。 …

深度解析YOLOV9,目标检测算法(附论文和源码)|

目录 一、YOLOV9 1、概述: 2,论文摘要: 输入数据在前馈过程中可能会有不可忽略的信息丢失。这种信息丢失会导致梯度流出现偏差,而梯度流又被用于更新模型。上述问题会导致深度网络在目标和输入之间建立不正确的关联&#xff0c…

算法分析与设计复习__递归方程与分治

总结自:【算法设计与分析】期末考试突击课_哔哩哔哩_bilibili 1.递归,递归方程 1.1递归条件: 1.一个问题的解可以分解为几个子问题的解; 2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样; 3.存在…

【Git教程】(十八)拆分大项目 — 概述及使用要求,执行过程及其实现,替代解决方案 ~

Git教程 拆分大项目 1️⃣ 概述2️⃣ 使用要求3️⃣ 执行过程及其实现3.1 拆分模块版本库3.2 将拆分出的模块作为外部版本库集成 4️⃣ 替代解决方案 通常软件项目都是由单体小型系统开始的,在开发过程中项目规模和团队人员不断扩大, 将项目模块化会显得…

Redis-持久化操作-AOF

持久化操作-AOF AOF是什么? 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只允许加文 件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之…

git入门操作

一、介绍 Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。 二、注册Git代码托管平台账号 以下几个平台可供选择: Gitee: https://gitee.com/(国内) Gitee(码云&…