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

cnblogs 2024-06-13 08:15:00 阅读 55

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

对于Base编码的学习做了一些分类总结,加深自身对于Base编码的流程的理解

目录

  • 什么是Base64编码?
  • 为什么要学习Base64编码?
  • Base64编码基础原理介绍
    • Base64编码组成
      • Base64编码索引表
    • Base64编码规则
      • Base64编码过程
      • 简记编码流程
      • 实战Base64编码(不同情况举例说明)
        • 1. 待编码字符数量为3的倍数
        • 2. 待编码字符数量不为3的倍数
  • Base64解码原理简单介绍
    • Base64解码过程
    • Base64解码特点
  • 验证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


上一篇: HTTP和HTTPS的区别

下一篇: ColorEasyDuino上手指南

本文标签

学习笔记 / 网编   


声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。