首页 > 其他分享 >Base64编码的原理

Base64编码的原理

时间:2022-08-22 12:12:25浏览次数:63  
标签:编码 00 补全 000000 二进制 Base64 原理 字节

  Base64编码可以对字符串(中英文),字节集进行编码转换,核心思想就是3个字节一组进行处理,到最后不足3个字节,用00代替,被代替的用字符=来表示。
下面举三个例子就能立马明白:

例1、 "Bug"(正好3个字节,最简单的一种):

1.先转化成ASCII编码,如下图

  

2.图中的为十六进制,我们需要把他们转换成二进制分别为:

  01000010,01110101,01100111
  注意这里二进制是8位的,前面的0不能少

3.我们把3个二进制合并一下变成

  010000100111010101100111

4.在把他们平均分割成四等份,四个新的二进制数诞生了,结果如下:

  010000/100111/010101/100111
  010000,100111,010101,100111

5.继续把这四个二进制数转换成十进制数,结果如下:

  16,39,21,39

6.根据Base64 编码表,查找相对应的字符即可,最后得出结果:QnVn

  

例2、 "算法"(正好4个字节,需要补全两个字节):

1.先转化成ASCII编码,如下图

  

2.前三个字节转换方法与例1相同,这里不再分析,直接得出结果y+O3,我们看下最后一个字节A8,补全成3字节如下:

  A8,00,00

3.把他们转换成二进制分别为:

  10101000,00000000,00000000

4.合并后分割成四等份

  101010 000000 000000 000000
  42,0,0,0

5.由于我们在后面补全了两个字节,所以后面必须得有两个=号。42与第一个0可以去表中查询,后面的两个0可以理解成异常用=表示,得出结果qA==

6.最终结果:y+O3qA==

例3、 一张GIF图片(选取一张特别小的图片研究,最后需补全一个字节):

  

1.前面33个字节直接略过,得出结果:R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQB

2.剩下两个字节补全成3个字节如下:

  00,3B,00

3.把他们转换成二进制数,结果如下:

  00000000,00111011,00000000

4.合并后分割成四等份

  000000 000011 101100 000000
  0,3,44,0

5.由于最后补全了一个字节,所以最后一位为=号,前面三位去表中查询,得出结果ADs=

6.最终结果:R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=

补充:(反编码还原)

1.这里就举一个例子,逆着编码的思想来。以"T0s="为例

从表中查询对于编码为:
19,52,44,00

2.转换为二进制数如下:

10011,110100,101100,000000

3.合并后分成三等份并转换为十六进制ASCII码:

1001111 01001011 00000000
4F,4B

4.由于补全了一位,最后就前两个ASCII码有效,最终结果如下:

标签:编码,00,补全,000000,二进制,Base64,原理,字节
From: https://www.cnblogs.com/YXGust/p/16611570.html

相关文章

  • 断点续传原理
    断点续传的原理是,当上传失败时,记录上传位置,进行续传时根据偏移继续上传即可。本地模拟断点续传操作首先模拟下e盘文件复制到d盘时出错,由e盘做客户端,d盘做服务端,客户端......
  • RabbitMQ 入门系列:3、基础编码:官方SDK的引用、链接创建、单例改造、发送消息、接收消
    系列目录RabbitMQ入门系列:1、MQ的应用场景的选择与RabbitMQ安装。RabbitMQ入门系列:2、基础含义:链接、通道、队列、交换机。RabbitMQ入门系列:3、基础含义:持久化、......
  • 读写锁的原理
    读写锁的相关知识读写锁是写独占,读共享,若有一个线程正在写,占了写锁,其他线程写锁读锁都拿不到。读写锁高2字节保存读锁,低2字节保存写锁。1、如果一个线程用读锁锁定了临......
  • Java实现BCD编码与十进制转换
    1、BCD码介绍BCD码(Binary-CodedDecimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编......
  • 容斥原理
    时间复杂度分析:O(2^n)所有一项集合的个数-两项的集合个数+所有三项的集合个数-四项集合的个数......;C(n,1)+C(n,2)+C(n,3)+......+C(n,n);又因为:C(n,0)+C(n,1)+C(n,2)+C(......
  • 深入理解 Spring 事务:入门、使用、原理
    大家好,我是树哥。Spring事务是复杂一致性业务必备的知识点,掌握好Spring事务可以让我们写出更好地代码。这篇文章我们将介绍Spring事务的诞生背景,从而让我们可以更清......
  • redis核心数据结构与高性能原理
    一:redis安装1.下载wgethttp://download.redis.io/releases/redis-5.0.3.tar.gz 2.解压和编译tarxzfredis‐5.0.3.tar.gzcdredis‐5.0.3#进入到解压好的re......
  • 容斥原理
    https://www.acwing.com/problem/content/description/892/给定一个整数\(n\)和\(m\)个不同的质数\(p_1,p_2,...,p_m\)。请你求出1∼\(n\)中能被\(p_1,p_......
  • 一文搞懂 Ftrace 的实现原理
    arm64栈帧结构arm64有31个通用寄存器r0-r30,用法分别如下:寄存器意义SPStackPointer:栈指针r30LinkRegister:在调用函数时候,保存下一条要执行指令的......
  • Hadoop及其三大组件原理
    Hadoop是什么?由Apache基金会开发的分布式系统基础架构海量数据的存储和分析计算 Hadoop架构历史:1.0HDFS和MapReduce2.0在1.0基础上增加了YARN(任务调度),解放了Ma......