• Base64


    本文是对Base64的编码原理和实现的简单介绍

    1.Base64简单说明

        描述:Base64可以成为密码学的基石,非常重要。

        特点:可以将任意的二进制数据进行Base64编码

        结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件。

        65字符:A~Z a~z 0~9 + / =

        对文件进行base64编码后文件数据的变化:编码后的数据~=编码前数据的4/3,会大1/3左右。

    2.命令行进行Base64编码和解码

        编码:base64 123.png -o 123.txt

        解码:base64 123.txt -o test.png -D

    3.Base64编码原理

        1)将所有字符转化为ASCII码;

        2)将ASCII码转化为8位二进制;

        3)将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;

        4)统一在6位二进制前补两个0凑足8位;

        5)将补0后的二进制转为十进制;

        6)从Base64编码表获取十进制对应的Base64编码;

    处理过程说明:

        a.转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。

        b.数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。

        c.不断进行,直到全部输入数据转换完成。

        d.如果最后剩下两个输入数据,在编码结果后加1个“=”;

        e.如果最后剩下一个输入数据,编码结果后加2个“=”;

        f.如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

    4.实现

        a.说明:

            1)从iOS7.0 开始,苹果就提供了base64的编码和解码支持

            2)如果是老项目,则还能看到base64编码和解码的第三方框架,如果当前不再支持iOS7.0以下版本,则建议替换。

        b.相关代码:

        //给定一个字符串,对该字符串进行Base64编码,然后返回编码后的结果

        -(NSString *)base64EncodeString:(NSString *)string

        {

            //1.先把字符串转换为二进制数据

            NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

            //2.对二进制数据进行base64编码,返回编码后的字符串

            return [data base64EncodedStringWithOptions:0];

        }

        //对base64编码后的字符串进行解码

        -(NSString *)base64DecodeString:(NSString *)string

        {

            //1.将base64编码后的字符串『解码』为二进制数据

            NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];

            //2.把二进制数据转换为字符串返回

            return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

        }

        c.终端测试命令

            $ echo -n A | base64

            $ echo -n QQ== |base64 -D

  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/chenjianjian/p/5399745.html
Copyright © 2020-2023  润新知