了解Base64编码解码

了解Base64编码解码

我们经常说Base64,那Base64到底是什么呢?
Base64是一种基于64个可打印字符来表示二进制数据的表示方法,常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,会将不便于查看的二进制数据用Base64进行表示。所以Bsea64经常用于密码学中,因为密码学通常用二进制进行加密,加密的结果用Base64编码来表示并传输。

我们想了解Base64,其实看下面的Base64索引表就可以了。
Base64索引表

在Base64中的可打印字符包括字母A-Za-z数字0-9共有62个字符,加上+/共64个字符,实际上还有一个字符=来作为后缀。比如:编码Man
编码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编码

左侧的图片是原始文件,通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值