【计算机知识】Base64 编码说明

2023-11-06

一、理论

Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法,由于 2^6=64,所以每 6 个比特为一个单元,对应某个可打印字符。

Base64 常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括 MIME 的电子邮件及 XML 的一些复杂数据。

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

为了保证所输出的编码位可读字符,Base64 制定了一个编码表,以便进行统一转换。编码表的大小为 2^6=64,这也是 Base64 名称的由来。

在 Base64 中的可打印字符包括字母 A-Z、a-z、数字 0-9,这样共有 62 个字符,此外两个可打印符号在不同的系统中而不同。

以下是 Base64 编码的基本步骤:

  • 将数据划分为 3 个字节一组(24位)。
  • 将每个字节转换为 8 位二进制形式。
  • 将 24 位数据按照 6 位一组进行划分,得到 4 个 6 位的组。
  • 将每个 6 位的组转换为对应的 Base64 字符。
  • 如果数据不足 3 字节,进行填充。
  • 将所有转换后的 Base64 字符连接起来,形成最终的编码结果。

解码 Base64 编码的过程与编码相反,将每个 Base64 字符转换为对应的6位二进制值,然后将这些 6 位值组合成原始的二进制数据。

Base64 编码具有以下特点:

  • 编码后的数据长度总是比原始数据长约 1/3。
  • 编码后的数据可以包含 A-Z、a-z、0-9 和两个额外字符的任意组合。
  • Base64 编码是一种可逆的编码方式,可以通过解码还原原始数据。

二、编码表

在这里插入图片描述
在这里插入图片描述
举例来说,一段引用自托马斯·霍布斯《利维坦》的文本:

Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

使用 Base64 编码之后变成:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

编码 “Man” 的结果为 TWFu,转换过程如下:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计算机知识】Base64 编码说明 的相关文章

随机推荐

  • 写一个函数,用户输入一个数判断是否是素数

    写一个函数 用户输入一个数判断是否是素数 function get num if num 1 num 0 return num 不是质数 for var i 2 i lt num i if num i 0 return num 不是质数 r
  • oracle生成标准uuid,Oracle 生成uuid方法

    近日 遇到朋友问及如何生成UUID 是 通用唯一识别码 Universally Unique Identifier 方法 其实数据中是支持的 Oracle中生成跨系统的唯一识别符UUID非常方便 比生成序列还简单 直接用sys guid 就
  • Stable Doodle:简单涂鸦一键变成艺术品

    摘要 Stable Doodle 是一款使用 AI 技术将简单涂鸦转化为艺术品的应用 它可以帮助用户快速 轻松地创作出精美的图画 本教程将介绍 Stable Doodle 的基本使用方法 正文 Stable Doodle 的使用非常简单 只
  • 2080ti,驱动安装,CUDA安装,CUDNN安装,CUDA10.1的不兼容问题

    发现问题 哎呦 我跑的是CPU 不是GPU 解决问题 Tensorflow目前不支持CUDA10 1 继续解决问题 哎呦 驱动被不小心删掉了 那就全部重新安装吧 最终解决好了 跑起来了 看似GPU 其实跑的是CPU 之前写了代码发现 能跑起
  • 分布式版本控制VS集中式版本控制

    集中式版本控制 诸如CVS SVN等 都有一个集中管理的服务器 保存所有的文件修订版本 而协同工作的人们都通过客户端连接到这台服务器 取出最新的文件或者提交更新 如上图所示 A B C为三位开发者 这是A将代码拉到本地进行开发 这个时候A开
  • raise_for_status()方法

    raise for status 方法 理解Response类非常重要 Response这样的一个对象返回了所有的网页内容 那么它也提供了一个方法 叫raise for status 这个方法是专门与异常打交道的方法 该方法有这样一个有趣的
  • 如何模拟弱网条件 - 限流, 丢包, 延迟和抖动

    Abstract 弱网条件的模拟 Authors Walter Fan Category learning note Status v1 0 Updated 2023 02 16 License CC BY NC ND 4 0 概述 在网络
  • 什么是车联网

    要弄清车联网是什么 还要从许多年前说起 比尔 盖茨等人曾提出物联网的概念 即 万物相连的互联网 物联网是要将各种信息传感设备与互联网结合起来从而形成一个的巨大的网络 简单来说 就是给各种各样的事物连上互联网 然后人们可以通过某个设备远程监控
  • 如何高效定位网络丢包问题?

    引言 本期分享一个比较常见的网络问题 丢包 例如我们去ping一个网站 如果能ping通 且网站返回信息全面 则说明与网站服务器的通信是畅通的 如果ping不通 或者网站返回的信息不全等 则很可能是数据被丢包了 类似情况想必大家都不陌生 针
  • java后端使用websocket实现与客户端之间接收及发送消息

    客户端请求websocket接口 连接通道 我这边业务成功客户端发消息 客户端自动刷新 接口 ws localhost 8080 websocket xx import org springframework web socket conf
  • Docker 安装 ES eslasticsearch

    Docker 安装 ES eslasticsearch 1 下载镜像 我这里下载的是 6 8 14 如果你不知道有哪些版本 可以查看 https hub docker com elasticsearch root localhost jzj
  • Java线程池多线程查询数据库提高查询效率

    Java线程池多线程查询数据库提高查询效率 需求 问题 思路 代码 解析 需求 公司数据统计报表查询 几张大表关联查询 包含跨库查询 数据联查 数据过滤 数据统计 问题 主表数据1 主表数据2 统计数据1 统计数据2 数据 数据 数据 数据
  • Linux_centos安装后无法进入图形界面

    问题 直接默认进入字符界面 root之后init 5也没用 解决方法 出现问题的原因在于安装时选择了最小安装 如图所示 转载于 https www cnblogs com vocoub p 11537978 html
  • OpenHarmony 3.1Release 电话功能演示—基于润和DAYU200开发套件

    1 前言 令人期待的OpenHarmony 3 1Release终于在3月31号发布了 目前DAYU200是首款支持OpenHarmony 3 1 Release版本的开发套件 官方购买链接购买 淘宝 https item taobao c
  • mac安装lrzsz出错Command failed with exit 128: git

    终端检查电脑是否安装了rz和sz which sz 若报错 则需要下载 由于网络和代理的原因 以下命令会报错 brew install lrzsz 是因为brew和git配置的代理存在冲突 对于无外网链接功能 无特殊配置的git而言 需要安
  • spring的注入bean的几种方式

    平常的Java开发中 程序员在某个类中需要依赖其它类的方法 通常是new一个依赖类再调用类实例的方法 这种开发存在的问题是new的类实例不好统一管理 Spring提出了依赖注入的思想 即依赖类不由程序员实例化 而是通过Spring容器帮我们
  • Linux命令行模式和图形界面的切换

    1 1 命令行 gt 图形 执行startx命令 1 2 图形 gt 命令行 Ctrl Alt F1 F6 2 启动默认 系统开机进入的界面 2 1 启动进入命令行模式 修改 etc inittab文件 id 3 initdefault 2
  • ERROR Error: No module factory availabl at Object.PROJECT_CONFIG_JSON_NOT_VALID_OR_NOT_EXIST ‘Error

    1 使用微信一键打包工具提示 ERROR Error No module factory available for dependency type CssDependency Error 请检查 project config json 是
  • 在运行jar包时如何替换jar内变量的值?

    在运行jar包时如何替换jar内变量的值 举个例子 1 问题描述 java程序中定义了变量String vars System getProperty aa String vars1 System getProperty aa test 把
  • 【计算机知识】Base64 编码说明

    一 理论 Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法 由于 2 6 64 所以每 6 个比特为一个单元 对应某个可打印字符 Base64 常用于在通常处理文本数据的场合 表示 传输 存储一些二进制数据 包括 MI