swift

URL安全的标准Base64编码和解码问题

2016-12-23  本文已影响612人  Eugene_iOS
标准Base64编码使用的64个字符表
Base64是什么?

Base64是一种用64个字符对任意数据进行编码,表示任意二进制数据的方法。

Base64编解码时需要注意的问题

Base64将二进制转码成可见字符方便进行HTTP传输,如果直接使用base64_encode和base64_decode方法的话,生成的字符串可能不适用URL地址。因为base64转码时会生成如:+/=等这些被URL进行转码的特殊字符,导致两方面数据不一致。
这时我们可以在发送前将+/=这些字符替换成URL不会转码的字符,接收到数据后,再将这些字符替换回去,再进行解码。

非URL安全的字符串编码:

字符串编码 :

- (NSString *)base64EncodedString:(NSString *)string;
{
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    return [data base64EncodedStringWithOptions:0];
}``` 
字符串解码:

**URL安全的字符串编码:**
>字符串编码 :
- (NSString *)safeUrlBase64Decode:(NSString*)safeUrlbase64Str
{   //将safeBase64编码中的"-","_"字符串转换成"+","/",字符串长度余4倍的位补"="
    // '-' -> '+'
    // '_' -> '/'
    // 不足4倍长度,补'='
    NSMutableString * base64Str = [[NSMutableString alloc] initWithString:safeUrlbase64Str];
    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"-" withString:@"+"];
    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"_" withString:@"/"];
    NSInteger mod4 = base64Str.length % 4;
    if(mod4 > 0) {
        [base64Str appendString:[@"====" substringToIndex:(4-mod4)]];
    }
    return [self base64DecodedString:base64Str];
}

写在最后

如有错误,请指教!

上一篇 下一篇

猜你喜欢

热点阅读