美文网首页
iOS知识点☞Base64编码

iOS知识点☞Base64编码

作者: fmxccccc | 来源:发表于2018-11-02 10:23 被阅读72次

    前言

    最近在做项目的时候用到了 base64 编码,后面发现对这个东西一点都不了解,所以就查阅了下资料,这里做一个记录

    Base64

    之所以称为Base64编码是因为它使用了64个字符来对任意的数据进行编码,下面就是Base64的一个编码表

    编码表

    Base64将一个8bit的字节序列拆位一个6位的片段,并且每个6位片段都能在上面的表中找到对应的表示字符,为什么一个6位片段就能够完整的表示正规的8个bit呢?8和6的最小公倍数 是24,也就是说3个传统字节可以由4个Base64字符来表示,保证有效位数是一样的,这样就多了1/3的字节数来弥补Base64只有6个有效bit的不足,下面我们来个例子就能够更好的理解其中的原理,我们以Man这个字符串为例,我们来看看其转换后的Base64编码是什么样子的

    文本 M a n
    ASCII编码 77 97 110
    二进制位 01001101 01100001 01101110

    对应的我们将二进制的8位化成6位为一个字节十进制数,并且找到其对应的Base64编码

    划为6位的二进制 010011 010110 000101 101110
    十进制 19 22 5 46
    Base64 T W F U

    通过上面我们可以得出Man的base64编码后的结果为TWFU,如果只有一个字节的字符的话就像下面这样

    文本 A
    二进制位 01000001
    划为6位的二进制 010000 010000 000000 000000
    Base64 Q Q = =

    我们可以得出一个规律,一个字符都是三个字节,三个字节的去转换的,如果不够三个字节后面就用0替代,其对应的Base64编码为=,所以我们在常规的Base64编码发现最多不会超过两个=,并且=也不会出现在编码中间,都是出现在结尾部分。

    通常我们在开发中会遇到一些字符串的转化,便可以通过以下方式来进行

    // 普通字符串 -> base64
    NSString *man = @"Man";
    NSString *base64String = [[man dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];
    
    // base64 -> 普通字符串
    NSData *normalData = [NSData alloc] initWithBase64EncodedString:base64String options:0];
    NSString *normalString = [NSString alloc] initWithData:normalData encoding:NSUTF8StringEncoding];
    

    结束

    Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,需要解码后才能阅读。

    以上

    相关文章

      网友评论

          本文标题:iOS知识点☞Base64编码

          本文链接:https://www.haomeiwen.com/subject/eisqxqtx.html