Base64是一种编码算法,它利用6bit字符表达了原本的8bit字符,相比8bit的字符编码,Base64的编码多占用1/3的字节长度,以此实现更好的兼容性
编码流程(如对ABC进行Base64编码)
1.先将字符转换成相应的二进制拼接后得到
字符 | 对应的ASCII码值 | 二进制值 |
---|---|---|
A | 65 | 01000001 |
B | 66 | 01000010 |
C | 67 | 01000011 |
2.将拼接后的值以为单位划分为4个数据组,最高位填充两个0,而后将重组后的4个字节转化为10进制,最后根据Base64字符表查出对应的值
字节 | 对应的十进制 | Base64表对应值 |
---|---|---|
00010000 | 16 | Q |
00010100 | 20 | U |
00001001 | 19 | J |
00000011 | 3 | D |
注:不足位数的补0
Base64字符表由,,,,构成
Base64加密特点:
- 只是一种编码方式,不属于加密算法,一般不用于加密,因为不安全,可以通过base64表推算,但是一般加密后的数据用base64表示
- 编码后末尾可能有=号(两个0用=表示)
代码实现
#pragma mark 编码
+ (NSString *)base64EncodedStringWithData:(NSData *)data
{
//判断是否传入需要加密数据参数
if ((data == nil) || (data == NULL)) {
return nil;
} else if (![data isKindOfClass:[NSData class]]) {
return nil;
}
//判断设备系统是否满足条件
if ([[[UIDevice currentDevice] systemVersion] doubleValue] <= 6.9) {
return nil;
}
//使用系统的API进行Base64加密操作
NSDataBase64EncodingOptions options;
options = NSDataBase64EncodingEndLineWithLineFeed;
return [data base64EncodedStringWithOptions:options];
}
#pragma mark 解码
+ (NSData *)base64DecodeDataWithString:(NSString *)string
{
//判断是否传入需要加密数据参数
if ((string == nil) || (string == NULL)) {
return nil;
} else if (![string isKindOfClass:[NSString class]]) {
return nil;
}
//判断设备系统是否满足条件
if ([[[UIDevice currentDevice] systemVersion] doubleValue] <= 6.9) {
return nil;
}
//使用系统的API进行Base64解密操作
NSDataBase64DecodingOptions options;
options = NSDataBase64DecodingIgnoreUnknownCharacters;
return [[NSData alloc] initWithBase64EncodedString:string options:options];
}
终端实现
1.文件
编码:base64 test.jpg -o test.txt
解码:base64 -D test.txt -o test.jpg
2.字符串
编码:echo -n ABC | base64
解码:echo -n QUJD | base64 -D