首页 > 其他分享 >Base64编码解码流程的初步学习

Base64编码解码流程的初步学习

时间:2024-06-12 19:56:35浏览次数:19  
标签:编码 字节 字符 二进制 解码 Base64

目录

什么是Base64编码?

Base64 编码是网络上最常见的用于传输8bit字节代码的编码方式之一,是一种基于64个可见字符来表示二进制数据的方法。

为什么要学习Base64编码?

部分网络上传输渠道并不支持所有字节,比如邮件,ASCII 控制字符 、中文、图片二进制数据等。最好的方法是在不改变传统协议的情况下,开辟一种新方案来支持二进制文件的传输。把不可见字符用可见字符表示。base64就是一种把不可见字符变成可见字符的编码方式。

Base64编码基础原理介绍

Base64编码组成

Base64编码是使用64个可打印ASCII字符("A-Z"、"a-z"、"0-9"、'+'、'/')将任意字节序列数据编码成ASCII字符串,另有'='符号用作后缀用途。

Base64编码索引表

"A — Z" --- 编码范围为 0 ~ 25

"a — z" --- 编码范围为 26 ~ 51

"0 — 9" --- 编码范围为 52 ~ 61

' + ' --- 编码为 62

' / ' --- 编码为 63

image

Base64编码规则

Base64编码过程

Base64将输入字符串按字节切分,取得每个字节对应的二进制值(若不足8比特则高位补0),然后将这些二进制数值串联起来,再按照6比特一组进行切分(因为2^6=64),最后一组若不足6比特则末尾补0。将每组二进制值转换成十进制,然后在上述表格中找到对应的符号并串联起来就是Base64编码结果。

由于二进制数据是按照8比特一组进行传输,因此Base64按照6比特一组切分的二进制数据必须是24比特的倍数(6和8的最小公倍数)。24比特就是3个字节,若原字节序列数据长度不是3的倍数时且剩下1个输入数据,则在编码结果后加2个=;若剩下2个输入数据,则在编码结果后加1个=。

完整的Base64定义可见RFC1421和RFC2045。因为Base64算法是将3个字节原数据编码为4个字节新数据,所以Base64编码后的数据比原始数据略长,为原来的4/3。

简记编码流程

1)将所有字符转化为ASCII码;

2)将ASCII码转化为8位二进制;

3)将8位二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;

4)将每组6位的二进制转为十进制;

5)从Base64编码表获取十进制对应的Base64编码;

实战Base64编码(不同情况举例说明)

1. 待编码字符数量为3的倍数

此处以三个字节进行Base64编码流程为例子,具体流程如下图所示:

image

2. 待编码字符数量不为3的倍数

我们此时可以先将3的倍数的数量的字符先进行编码,再处理剩下的1个或者2个字符,此处以4个字符进行Base64编码流程为例,具体流程如下图所示:

image

Base64解码原理简单介绍

Base64解码过程

base64解码,即是base64编码的逆过程,如果理解了编码过程,解码过程也就容易理解。将base64编码数据根据编码表分别索引到编码值,然后每4个编码值一组组成一个24位的数据流,解码为3个字符。对于末尾位“=”的base64数据,最终取得的4字节数据,需要去掉“=”再进行转换。

Base64解码特点

base64编码中只包含64个可打印字符,而PHP在解码base64时,遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码。

验证Base64编码解码正误

我们可以借助网上的“Base64编码解码”工具对自己编码的结果进行验证。Base64 在线编码解码 | Base64 加密解密 - Base64.us

image

标签:编码,字节,字符,二进制,解码,Base64
From: https://www.cnblogs.com/fly-home/p/18244594

相关文章

  • 检查字符串的byte[]是什么编码字符集
    引入依赖<dependency><groupId>com.googlecode.juniversalchardet</groupId><artifactId>juniversalchardet</artifactId><version>1.0.3</version></dependency>包装......
  • Base编码规则
    Base64是一种基于64个可打印字符来表示二进制数据的编码方法。它通常用于在不支持二进制数据的环境中传输数据,例如在电子邮件中传输附件或在网页中嵌入图片等。Base64编码规则如下:编码字符集:Base64编码使用64个字符来表示任意二进制数据。这些字符包括大写字母A-Z、小写字母a-......
  • base64
    Base64编码机制在C语言中实现Base64编码,你可以使用以下步骤:1:将输入数据每6位分组并扩展为8位。2:根据Base64编码表(下面给出)转换每个8位组。3:如果输入数据不是3的倍数,则需要填充(pad)到3的倍数长度。Base64编码表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567......
  • C语言中关于Base64编码的基础原理
    Base64编码简述:1.Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。2.Base64,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集,(任何符号都可以转换成这个字符集中的字符,这个转换过......
  • JavaScript基础用法(变量定义、输入输出、转义符、注释和编码规范)
    天行健,君子以自强不息;地势坤,君子以厚德载物。每个人都有惰性,但不断学习是好好生活的根本,共勉!文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。文章目录JavaScript基础用法1.变量1.1语法1.2示例代码1.3浏览器效果2.输入和输出2.1输出2.1.1输......
  • Csharp Base64 隐写.md
    Csharp(C#.net)Base64隐写最近被拉去报名参加CTF比赛,赶鸭子上架,趁着端午假期在网上做了做题,有一些题需要用到编程,网上介绍的一般都是Python写的,自己平时鼓捣的后端语言只有C#,python的脚本看得一知半解,有多函数还得去查阅用法,非常不方便,便想试着用C#写写试试,其实C#也支持在vsco......
  • 推测性解码:加速多模态大型语言模型的推理
    大模型(LLMs)以其卓越的性能在多个应用场景中大放异彩。然而,随着应用的深入,这些模型的推理速度问题逐渐凸显。为了解决这一挑战,推测性解码(SpeculativeDecoding,SPD)技术应运而生。本文深入探讨了SPD在多模态大型语言模型(MLLMs)中的应用,尤其是针对LLaVA7B模型的优化。MLLMs通过融......
  • MySQL5.7编码设置
    MySQL5.7编码设置——解决在命令行操作sql乱码问题修改mysql的数据目录下(当时你指定安装的数据目录,或者去C:\ProgramData\MySQL\MySQLServer5.7下找)的my.ini配置文件:[mysql]#大概63行左右,在其下面添加default-character-set=utf8[mysqld]#大概76行左右,在其下面添加char......
  • Golang-编码加密-Xor(GG)
    go语言环境搭建Golang学习日志━━下载及安装_golang下载-CSDN博客  gorunxxx.go  gobuildxxx.go 首先,cs.msf生成比特流数据. 放入xor,py脚本中进行xor加密. xor.pydefxor(shellcode,key):new_shellcode=""key_len=len(key)......
  • 杂项——编码器控制小车走固定距离(stm32)
    先算出轮子转一周编码器的数值(假设为1000),再算出轮子一周的周长(假设为10cm)。那么要前进1米只需要转1米/10cm等于10圈,10圈编码器数值为10000。我们只需要在代码里面写出编码器数值如果<10000则让小车前进,如果>10000让小车停止,即可实现控制小车走固定的距离编码器.c函数(编码器......