• base64编码


    Base64是一种用64个可打印字符来表示任意二进制数据的方法。

    base64编解码就是将二进制数据和64中可打印字符的相互转化。

    转化原理

    1,将二进制数据每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。

    2,将上面的24个二进制位每6个一组,共分为4组。

    3,在每组前添加2个0,每组由6个变为8个二进制位,总共32个二进制位,也就是四个字节。

    4,根据base64编码对照表将每个字节转化成对应的可打印字符

    转化实例如下图

    问题:

    1,为什么每6位分为一组?

      因为6个二进制位就是2的6次方,也就是64种变化,正好对应64个可打印字符。

      举一反三,如果是5位一组,那就对应32种可打印字符,就可以设计base32了。

    2,分成四组后为什么每组添2个0变成四个字节?

      因为计算机存储的最小单位就是字节,也就是8位。所以每组6位前添2个0凑成8位的一个字节才能存储。

    标准的base64编码对照表如下。

    标准base64的64个可打印字符由52个大小写英文字母和10个数字(0-9)以及  / 和 + 组成。

    base64是将二进制每三个字节转为4个字节,再根据base64编码对照表进行转化。那如果不足三个字节该如何?

    对于标准base64是按如下处理的:

    两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。

    因此,如下图中“BC”转换之后为“QKM=”;
    一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。

    因此,如下图中“A”转换之后为“QQ==”

    由于标准base64的64个可打印字符由52个大小写英文字母10个数字(0-9)以及  /+ 组成。而对于不足字节有需要用 = 来补齐字节。

    所以经过标准base64编码后,就有可能包含+ /  = 这三种字符。

    而在URL编码中这三种字符要么需要编码成%XX的形式,要么具有特殊意义。

    所以标准的base64一般不用于对URL进行编码。

    所以有些非标准的base64编码会把字符 +  / 分别变成 -  _ 或者其他字符,并且不会用 = 进行补位。

    这样就可以对URL进行编码或者用于其它用途的编码

      

  • 相关阅读:
    黑马程序员——用函数实现模块化程序设计(一)
    RN个人笔记SectionListView
    小程序实现APP底部(TabBar)页面控制效果
    #import "项目名-Swift.h"的介绍
    OC & Swift中UITextFiled、UITextView限制输入字数
    Xcode8使用CoreData如何生成OC和Swift版的SubClass
    Swift之“闭包”的应用
    Swift中两种桥接头文件创建方式
    swift头部无线轮播视图
    swift中collectionView的简单用法
  • 原文地址:https://www.cnblogs.com/gaoBlog/p/11585270.html
Copyright © 2020-2023  润新知