从原理上搞定编码– Base64编码「建议收藏」

从原理上搞定编码– Base64编码「建议收藏」开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编解码器,方便阅读文章的同时来实验。

  一. Base64编码由来

  为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情 况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。

  二. Base64编码原理

  看一下Base64的索引表,字符选用了”A-Z、a-z、0-9、+、/” 64个可打印字符。数值代表字符的索引,这个是标准Base64协议规定的,不能更改。64个字符用6个bit位就可以全部表示,一个字节有8个bit 位,剩下两个bit就浪费掉了,这样就不得不牺牲一部分空间了。这里需要弄明白的就是一个Base64字符是8个bit,但是有效部分只有右边的6个 bit,左边两个永远是0。

从原理上搞定编码-- Base64编码「建议收藏」

  那么怎么用6个有效bit来表示传统字符的8个bit呢?8和6的最小公倍数 是24,也就是说3个传统字节可以由4个Base64字符来表示,保证有效位数是一样的,这样就多了1/3的字节数来弥补Base64只有6个有效bit 的不足。你也可以说用两个Base64字符也能表示一个传统字符,但是采用最小公倍数的方案其实是最减少浪费的。结合下边的图比较容易理解。Man是三个 字符,一共24个有效bit,只好用4个Base64字符来凑齐24个有效位。红框表示的是对应的Base64,6个有效位转化成相应的索引值再对应 Base64字符表,查出”Man”对应的Base64字符是”TWFU”。说到这里有个原则不知道你发现了没有,要转换成Base64的最小单位就是三个字节,对一个字符串来说每次都是三个字节三个字节的转换,对应的是Base64的四个字节。这个搞清楚了其实就差不多了。

从原理上搞定编码-- Base64编码「建议收藏」         从原理上搞定编码-- Base64编码「建议收藏」

  但是转换到最后你发现不够三个字节了怎么办呢?愿望终于实现了,我们可以用两 个Base64来表示一个字符或用三个Base64表示两个字符,像下图的A对应的第二个Base64的二进制位只有两个,把后边的四个补0就是了。所以 A对应的Base64字符就是QQ。上边已经说过了,原则是Base64字符的最小单位是四个字符一组,那这才两个字 符,后边补两个”=”吧。其实不用”=”也不耽误解码,之所以用”=”,可能是考虑到多段编码后的Base64字符串拼起来也不会引起混淆。由此可见 Base64字符串只可能最后出现一个或两个”=”,中间是不可能出现”=”的。下图中字符”BC”的编码过程也是一样的。

从原理上搞定编码-- Base64编码「建议收藏」

  三. 总结  

  说起Base64编码可能有些奇怪,因为大多数的编码都是由字符转化成二进制的过程,而从二进制转成字符的过程称为解码。而Base64的概念就恰好反了,由二进制转到字符称为编码,由字符到二进制称为解码。

  Base64编码主要用在传输、存储、表示二进制等领域,还可以用来加密,但是这种加密比较简单,只是一眼看上去不知道什么内容罢了,当然也可以对Base64的字符序列进行定制来进行加密。

  Base64编码是从二进制到字符的过程,像一些中文字符用不同的编码转为二 进制时,产生的二进制是不一样的,所以最终产生的Base64字符也不一样。例如”上网”对应utf-8格式的Base64编码是”5LiK572R”, 对应GB2312格式的Base64编码是”yc/N+A==”。

来源:http://www.cnblogs.com/luguo3000/p/3940197.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167506.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月2日 下午1:00
下一篇 2022年8月2日 下午1:16


相关推荐

  • 安装azkaban

    安装azkaban一 azkaban 文件下载到 https github com azkaban azkaban 下载 zip 文件 利用 CRT 将文件上传至 liunx 服务器网盘地址 链接 https pan baidu com s 1qk5V45xd hqP5Tk4gl TBg 密码 gx41 二 编译 执行以下命令在编译时要求环境 java8 安装 gitgccg 1 java8 环境安装

    2026年3月18日
    2
  • Mysql环境变量配置

    Mysql环境变量配置一 mysql 的环境变量配置步骤 1 1 在桌面选择 计算机 的图标 右键 gt 属性 gt 点击 高级系统设置 gt 点击 环境变量 2 2 新建 MYSQL HOME 变量 并将值设置为 C ProgramFiles 5 点击确定 C ProgramFiles 5 是指的是自己 mysql 安装位置 这里是在系统变量这一栏新建 3 编辑 Path 系统变量 在系统变量里 找到 Path 变量 点击 编辑 按钮 将 mysql 安

    2026年3月17日
    1
  • 计算机网络知识点汇总(谢希仁 第七版)「建议收藏」

    计算机网络知识点汇总(谢希仁 第七版)「建议收藏」写在前面这篇博客是当时在大二的时候为了学习计网总结的一篇学习笔记,其实当时的做法和抄书差不多,但是时隔两年的时间没想到有这么多的同学会来关注学习,实在受宠若惊;现在我已经大四,而且刚刚经历过秋招(2019/12),并且签约了一家薪资待遇不错的Java开发岗,所以在闲下来的时候准备将这篇博客重新整理一下,主要为了几方面:一·将之前没有整理到的内容补充详细;二·为重难点的部分加上详…

    2022年6月12日
    85
  • 强化学习之DQN算法

    强化学习之DQN算法DQN DeepQNetwork 是强化学习中一种强大的算法 DeepMind 团队凭借该算法 让计算机打败了人类围棋 刷新了人们对人工智能的认知 强烈推荐莫烦大神的强化学习入门课程 本文主要参考莫烦大神的课程进行总结 论文 PlayingAtari https arxiv org abs 1312 5602 参考

    2025年8月18日
    7
  • Cadence IC设计环境搭建( IC617+MMSIM151+Calibre2015)

    Cadence IC设计环境搭建( IC617+MMSIM151+Calibre2015)做IC版图设计,必不可少的环境搭建,是在Linux上进行开发,此类的安装教程网上比较少,自己也是跌跌撞撞,最终耗了一天的时间才装好呵呵呵~,期间主要参考了下面两篇文章。1.知乎文章2.简书文章3.安装需要的文件:链接:https://pan.baidu.com/s/14acWcuHvXGRkqf_8zkveDQ提取码:uahd以下为我的使用画面…

    2022年6月10日
    104
  • oracle 的dba users表,oracle DBA 常用表和视图

    oracle 的dba users表,oracle DBA 常用表和视图dba 开头 dba users 数据库用户信息 dba segments 表段信息 dba extents 数据区信息 dba objects 数据库对象信息 dba tablespaces 数据库表空间信息 dba data files 数据文件设置信息 dba temp files 临时数据文件信息 dba rollback segs 回滚段信息 dba

    2026年3月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号