我们经常说Base64,那Base64到底是什么呢?
Base64是一种基于64个可打印字符来表示二进制数据的表示方法,常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,会将不便于查看的二进制数据用Base64进行表示。所以Bsea64经常用于密码学中,因为密码学通常用二进制进行加密,加密的结果用Base64编码来表示并传输。
我们想了解Base64,其实看下面的Base64索引表就可以了。
在Base64中的可打印字符包括字母A-Z
、a-z
、数字0-9
共有62个字符,加上+
、/
共64个字符,实际上还有一个字符=
来作为后缀。比如:编码Man
当Base64对一个二进制数据进行编码时,每6个位元为一个单元,对应某个可打印字符。3个字节有24个位元,对应于4个Base64单元,即3个字节可由4个可打印字符来表示,所以最少要24个比特位。如果不足24位,就在后面补0,后面补的0就会用=
来表示,所以=
也只会在最后面。
终端演示Base64编码
// 通过Base64将111图片进行编码,生成111.txt文件
$ base64 111.png -o 111.txt
// 对111.txt文件解码,生成222.png
$ base64 111.txt -o 222.png -D
左侧的图片是原始文件,通过Base64编码后输出右侧111.txt文件,再对111.txt文件解码还原。
代码演示Base64编码
Base64也是在iOS7以后出现的,接下来用代码简单操作一下
//
// ViewController.m
// Base64
//
// Created by Vincent on 2019/1/14.
// Copyright © 2019 Vincent. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (NSString *)getBase64Encode:(NSString *)encodeStr {
// 将传进来的string转成NSData,再进行Base64编码
NSData *data = [encodeStr dataUsingEncoding:NSUTF8StringEncoding];
return [data base64EncodedStringWithOptions:0];
}
- (NSString *)getBase64Decode:(NSString *)decodeStr {
// 由于传过来的是Base64编码字符串,则不需要先转二进制再解码,可以直接通过NSData初始化方法解码
NSData *data = [[NSData alloc] initWithBase64EncodedString:decodeStr options:0];
// 将data转成string
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"----编码:%@", [self getBase64Encode:@"abc"]);
NSLog(@"####解码:%@", [self getBase64Decode:[self getBase64Encode:@"abc"]]);
}
@end
- 打印结果
----编码:YWJj
####解码:abc
- 终端验证
// 通过Base64将abc进行编码
$ echo -n abc | base64
YWJj
验证通过!!!但是通过Base64编码,我们会发现编码结果会变大1/3。
该文章为记录本人的学习路程,希望能够帮助大家,也欢迎大家点赞留言交流!!!https://www.jianshu.com/p/26f2ed1ed1f6