我们利用终端演示一下base64编码。
误区:base64并非加密算法,它是一种数据编码方式,虽然是可逆的,但是它的编码方式是公开的,无所谓加密。
现在,我们桌面上有一张图片名字为:1111111.png

我们利用命令“base64 1111111.png -o abc.txt”输出 base64编码以后的c文件。

abc.txt就是对图片编码以后的文件,
可以利用命令“base64 abc.txt -o tutu.png -D”
-D代表解码

成功的导出了新的图,和1111111.png一样的tutu.png
原理:
base64其实最重要的就是这张表,

A-Z
a-z
0-9
/ + =
编码的时候,机制会利用0和1进行编码,6个为一组,24位。
010101 010010 11101 11
位数不足6位的,会在后面默认补0,上面的这串数字会变成
010101 010010 11101 110000,最后补位的数字,会变成“=”,这就是我们在很多base64编码后的文件末尾,见到很多“=”,“=”只会出现在末尾。
重点: 对一个二进制数据进行编码,文件会变大! 原有文件的4/3 , 多了1/3。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
//给一个字符 编码
-(NSString *)base64Endcode:(NSString *)str{
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
return [data base64EncodedStringWithOptions:0];
}
//给一个编码我对其进行解密
-(NSString *)base64Decode:(NSString *)str{
NSData * data = [[NSData alloc] initWithBase64EncodedString:str options:0];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"编码:%@",[self base64Endcode:@"A"]);
NSLog(@"解码:%@",[self base64Decode:@"QQ=="]);
}
网友评论