一文轻松明白 Base64 编码原理

news2024/11/15 11:14:25

把图片丢进浏览器,打开sources能看到一长串字符串,这是图片的Base64编码。这一长串编码到底是怎么生成的呢?
在这里插入图片描述
我们接下来探索一下base64编码的原理

Base64 名称的由来

Base64编码要求把3个8位的字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用’=‘,因此编码后输出的文本末尾可能会出现1或2个’='。

为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。(下面是Base64编码表)
在这里插入图片描述

思路

原始数据对应ASCII,生成8位的二进制,3个8位的字节(38=24)转化为4个6位的字节(46=24),不够补零。分割之后,得出来6位字节的二进制转化成十进制,再从base64表中寻找对应的字符

实现过程

原始数据:Mz1

根据ASCII表转换成8位二进制:01001101 | 01111010 | 00110001

将 38 切割成 46:010011 | 010111 | 101000 | 110001

分别转化成十进制:19 | 23 | 40 | 49

最后再去Base64编码表中找到数字对应的字符:T | X | o | x

最终 Mz1 的 Base64 :TXox

强化训练
Q:写出TB对应的Base64编码

1.TB1 对应的ASCII

T:01010100 B:01000010 1:00110001

2.将三个8位的二进制分割成4个6位的二进制

010101 000100 001000 110001

3.将二进制转换成十进制

21   4   8   49

4.将十进制按照Base64表得到Base64编码

V   E  J  x

A:TB1所对应的Base64编码为 VEJx

用Base64的来呈现图片的有什么优势呢?

1)减少http网络请求:网页上的图片资源如果采用http形式的url的话都会额外发送一次请求,网页发送的http请求次数越多,会造成页面加载速度越慢。而采用Base64格式的编码,将图片转化为字符串后,图片文件会随着html元素一并加载,这样就可以减少http请求的次数,对于网页优化是一种比较好的手段。
2)不会造成跨域请求的问题。
3)没有图片更新要重新上传,不会造成清理图片缓存的问题

不足之处

就在于增加了CSS文件的尺寸,造成数据库数据量的增大

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++代码编程学习(2):类和对象封装部分的两个案例-立方体与点圆位置

C类与对象 封装的学习 挺有趣的! 一、前言 昨日有点事忙了些,今天把昨天学习的两个案例给整理一下,C确实比较原始基础,在学习过程中需要好好总结分析与记录。 二、效果展示 案例一:设计立方体 立方体的面积和体积 用…

阿里微服务质量保障系列(一):微服务知多少

年初买了一本集团巨佬联合出的书《阿里测试之道》,然后认真拜读了下,我相信看过的同学都会获益匪浅,此书分享了阿里在大促保障、移动App测试、大数据测试、AI系统测试、云计算测试、资损防控、物流类测试等领域的方法、技术和工具平台&#x…

十一、Properties、多线程

Properties集合 Properties作为Map集合的使用 介绍 是一个Map体系的集合类Properties可以保存到流中或从流中加载属性列表中的每个键及其对应的值都是一个字符串 基本使用 public static void main(String[] args) {Properties prop new Properties();//增prop.put("…

Pytorch c++ 部署报错解决方案

目录 1. Only the versions between 2017 and 2019 (inclusive) are supported! 2. Cannot find cuDNN library. Turning the option off C 部署的时候,demo 写完之后,提示如下错误 1. Only the versions between 2017 and 2019 (inclusive) are sup…

使用Kubernetes部署xxl-job-admin及xxl-job执行器服务

部署环境 xxl-job-2.4.0kubernetes-1.26 这里以xxl-job官方的2.4.0的代码为例子,在官方编写的Dockerfile基础上使用dockerkubernetes进行部署,xxl-job-admin和执行器的Dockerfile、application等配置文件并不是关键,所以这里示例安装以官方…

Linux系统初始化进程及文件(带命令)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.系统初始化进程及文件 1.init 进程 2.Systemd概述 3.SysVi…

【Java语言】— 循环结构 :for循环

循环结构:for循环 1.for循环 控制一段代码反复执行很多次。 for循环的格式如下: for (初始化语句;循环条件;迭代语句){循环体语句(重复执行的代码);}下面我们通过案例:输出3次HelloWorld感受一下。 //需求:输出3次HelloWorld…

OpenOCD 不同仿真器使用操作总结记录

针对不同的仿真器使用 OpenOCD 时候的设置操作总结 ...... 矜辰所致目录前言一、OpenOCD 环境搭建二、OpenOCD 基本测试三、Makefile 中仿真器配置3.1 ST-link3.2 Jlink3.2 CMSIS-DAP(待更新)结语前言 在使用 GCC 环境开发 ARM 系列芯片的时候&#x…

ArcGIS基础实验操作100例--实验35等高线生成DEM

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验35 等高线生成DEM 目录 一、实验背景 二、实验数据 三、实验步骤 方法一 &#xff…

4.5、静态路由配置及其可能产生的路由环路问题

静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表\color{red}人工配置路由表人工配置路由表。 这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化。\color{red}但不能及时适应网络状态&#xff08…

我的世界Bukkit服务器插件开发教程(十三)资源包与玩家资料

十三、资源包与玩家资料 1.资源包(Resource Pack) 早期的 Minecraft 并没有资源包一说,而是被叫做材质包。有些服务器为了让玩家拥有更好的游戏体验,一般会在自己特制的客户端中存放一些资源包供玩家加载。 显然,使用…

自动梯度计算

神经网络的参数主要通过梯度下降来进行优化. 当确定了风险函数以及网络结构后, 我们就可以手动用链式法则来计算风险函数对每个参数的梯度, 并用代码进行实现. 但是手动求导并转换为计算机程序的过程非常琐碎并容易出错&#xff0…

二叉树的基础oj题(单值二叉树、相同的树、对称二叉树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的构建和遍历、翻转二叉树)

今天,我带来二叉树的基础oj题 目录单值二叉树:[链接](https://leetcode.cn/problems/univalued-binary-tree/)相同的树:[链接](https://leetcode.cn/problems/same-tree/)对称二叉树:[链接](https://leetcode.cn/problems/symmetr…

syzkaller 黑盒测试1:环境搭建

syzkaller 黑盒测试1:环境搭建 近期需要使用syzkaller对某Linux发行版系统内核进行测试,但是未提供内核源码,只能在黑盒条件下测试。这是笔者第一次接触syzkaller,对测试流程不太熟悉。另外,网上很少有syzkaller黑盒测…

C语言版扫雷——从0到1实现扫雷小游戏

🐒博客名:平凡的小苏 📚学习格言:有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 扫雷思维导图 目录 扫雷思维…

9_2、Java基本语法之常用类日期、时间类的使用

一、JDK 8之前时间日期API jdk8之前的日期时间类 1.System的currentTimeMillis() 2.java.util.Date以及子类java.sql.Date 3.SimpleDateFormat 4.Calender类:日历类 1、获取系统当前时间:System类下的currentTimeMillis(); //返回的是当前时间与1970年…

MySQL--整合Keepalived进行双机热备自动切换(升级版)

原文网址:MySQL--整合Keepalived进行双机热备自动切换(升级版)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL整合Keepalived进行双机热备自动切换(升级版)。 服务器要考虑高可用问题。nginx、tomcat、缓存、队列、数…

Java开发的古董拍卖系统竞标系统拍卖网

简介 古董展品拍卖网站 用户可以注册成为买家也可以申请开店成为卖家,发布古董展品,设置拍卖起止时间进行展品的拍卖。如果早于拍卖开始时间或者晚于拍卖结束时间,则不可以竞拍。多人竞拍,买家可以根据最高价设置谁中标&#xff…

系分 - 结构化方法【概念】

个人总结,仅供参考,欢迎加好友一起讨论 系分 - (概念)结构化方法 结构化方法贯穿整个软件工程全部,可以单独细分出来作为某个软件工程环节的技术指引 结构化方法,由结构化分析(SA,St…

【C语言进阶】速学,不会用数据库可不能再错过文本与二进制文件操作

目录 ✨前言✨: 🎈一、文本文件与二进制文件🎈: 🎁二、文件读取结束的判定🎁: 1.错误使用 feof 函数: 2.判断文件读取结束: 🎊三、文件缓冲区&#x1f38…