Base64加密

2019-06-05  本文已影响0人  ttcloud

Base64是一种编码算法,它利用6bit字符表达了原本的8bit字符,相比8bit的字符编码,Base64的编码多占用1/3的字节长度,以此实现更好的兼容性

编码流程(如对ABC进行Base64编码)

1.先将字符转换成相应的二进制拼接后得到\color{red}{010000010100001001000011}

字符 对应的ASCII码值 二进制值
A 65 01000001
B 66 01000010
C 67 01000011

2.将拼接后的值以\color{red}{6}为单位划分为4个数据组,最高位填充两个0,而后将重组后的4个字节转化为10进制,最后根据Base64字符表查出对应的值

字节 对应的十进制 Base64表对应值
00010000 16 Q
00010100 20 U
00001001 19 J
00000011 3 D

注:不足位数的补0

Base64字符表由\color{red}{a-z},\color{red}{A-Z},\color{red}{0-9},\color{red}{ / },\color{red}{ + }构成

Base64加密特点:

  1. 只是一种编码方式,不属于加密算法,一般不用于加密,因为不安全,可以通过base64表推算,但是一般加密后的数据用base64表示
  2. 编码后末尾可能有=号(两个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
上一篇 下一篇

猜你喜欢

热点阅读