美文网首页
06 - Base64编码

06 - Base64编码

作者: 卡布奇诺_95d2 | 来源:发表于2021-04-20 18:35 被阅读0次

Base64编码

什么是Base64?

Base64是网络上最常见的用于传输8bit字节码的编码方式之一。Base64就是一种基于64个可打印字符来表示二进制数据的方法。

64个可打印字符分别为:
* 10个数字:0~9
* 52个字母:a~z、A~Z
* 两个字符:+、/

注意:字符=在Base64编码中有特殊含义。

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才可阅读。

Base64编码规则

  1. 把3个8位字节(3*8=24)转换成4个6位字节(4*6=24),之后在6位的前面补两个0,形成一个新的8位字节。
  2. 每76个字符加一个换行符
  3. 最后的结束符也要处理

新生成的8位字节最大值为0x3F(63),可通过Base64码表找到对应字符。

Base64码表如下:
[站外图片上传中...(image-ec7fb0-1618914920191)]

示例1:abc,使用Base64编码
【步骤1】得到“abc“的ASCII码 
    97 98 99
【步骤2】将97 98 99转成换二进制
    01100001 01100010 01100011
【步骤3】三个8Bit的字节转换为四个6Bit的字节
    011000 010110 001001 100011
【步骤4】通过6bit位前面被0,生成新的8位字节
    00011000 00010110 00001001 00100011
【步骤5】通过Base码表查找相应字符
    00011000 --> 24 --> Y
    00010110 --> 22 --> W
    00001001 --> 9 --> J
    00100011 --> 35 --> j
    
因此 abc 的Base64编码后为 YWJj
示例2:Man,使用Base64编码
【步骤1】得到“Man“的ASCII码 
    77 97 110
【步骤2】将77 97 110转成换二进制
    01001101 01100001 01101110
【步骤3】三个8Bit的字节转换为四个6Bit的字节
    010011 010110 000101 101110
【步骤4】通过6bit位前面被0,生成新的8位字节
    00010011 00010110 00000101 00101110
【步骤5】通过Base码表查找相应字符
    00010011 --> 19 --> T
    00010110 --> 22 --> W
    00000101 --> 5 --> F
    00101110 --> 46 --> u
    
因此 Man 的Base64编码后为 TWFu
示例3:A,使用Base64编码
【步骤1】得到“A“的ASCII码 
    65
【步骤2】将65转成换二进制
    01000001
【步骤3】三个8Bit的字节转换为四个6Bit的字节
    010000 010000 000000 000000
【步骤4】通过6bit位前面被0,生成新的8位字节
    00010000 00010000 00000000 00000000
【步骤5】通过Base码表查找相应字符
    00010000 --> 16 --> Q
    00010000 --> 16 --> Q
    00000000 --> 0补位 --> =
    00000000 --> 0补位 --> =
    
因此 A 的Base64编码后为 QQ==

注意:当需要编码的字节数不为3的倍数,处理方式如下:

  1. 先使用0值在末尾补齐,使总的字节数能被3整除
  2. 进行Base64编码。
  3. 对于0补位的字节,使用=字符

Base64终端指令

语法:

base64 [OPTION]... [FILE]

参数:

-d, --decode         # 解码
-i, --ignore-garbage # 解码时,忽略非字母字符
-w, --wrap=COLS      # 在指定的字符数后自动换行(默认为76), 0 为禁用自动>换行

--help      # 显示此帮助说明并退出
--version   # 输出版本信息并退出

示例1:

// A 的Base64编码
macbookpro@macbookde % printf A | base64
QQ==

// QQ== 的Base64解码
macbookpro@macbookdeMacBook-Pro Desktop % printf QQ== | base64 -Dd
A%

示例2:

// Man 的Base64编码
macbookpro@macbookde % printf Man | base64
TWFu

// TWFu 的Base64解码
macbookpro@macbookde % printf TWFu | base64 -Dd
Man%

Base64的代码演示

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSString* str = [self base64Endcode:@"A"];
    NSLog(@"Encode : %@", str);
    
    str = [self base64Decode:str];
    NSLog(@"Decode : %@", str);
}

- (NSString*)base64Endcode:(NSString*)string{
    NSData* dataEndcode = [string dataUsingEncoding:NSUTF8StringEncoding];
    return [dataEndcode base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}

- (NSString*)base64Decode:(NSString*)string{
    NSData* dataDecode = [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters];
    return [[NSString alloc] initWithData:dataDecode encoding:NSUTF8StringEncoding];
}

//输出
2021-04-20 18:29:40.914709+0800 Demo[26465:23338472] Encode : QQ==
2021-04-20 18:29:40.914974+0800 Demo[26465:23338472] Decode : A

总结:

  1. Base64只是一种编码方式不是加密方式。
  2. Base64适用于表示二进制数据
  3. 通过Base64编码后的数据比原数据大概长1/3。
  4. Base64是通过查表的方式得到编码后的数据。

相关文章

  • iOS URL安全的Base64编码、解码

    参考iOS开发探索-Base64编码iOS URL编码&base64编码URL安全的Base64编码,解码 为什么...

  • BASE64 编码简析

    Base64编码: <1>·Base64编码简介: <2>·使用Base64的原因: <3>·编码原理: 成这个字...

  • SMTP整理

    账号:BASE64编码的账号 密码:BASE64编码的密码 快速BASE64编码网址: http://tools....

  • base64 和 url base64 和 encodeURIC

    1 先来看base64编码 2 再看url base64编码 可以看出,非url base64不会对斜杠进行编码。...

  • Base系列加密解密

    Base编码系列:[Base64][Base32] [Base16] [Base64] Base64编码是使用64...

  • java android 对接接口加密

    加密方式 方案1 使用Base64编码最常用的就是Base64编码了,Base64不算是加密,只是把字符经过编码变...

  • Base64

    Base64简介 Base64 原理解析 编码实现 Base64简介 命令行运行base64编码和解码 对文件操作...

  • base64编码解码原理散图

    base64编码出现原因: base64转码原理000.png base64编码原理: base64转码原理.pn...

  • 加密编码总结

    url编码 base64编码 工作中碰到url与base64配合加解密的问题,base64编码后的字符串中可能含有...

  • URL编码表 | Base64编码表

    URL编码表: Base64编码表:

网友评论

      本文标题:06 - Base64编码

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