标准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]; }
字符串解码:
- (NSString *)base64DecodedString:(NSString *)string { NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:0]; return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; }
URL安全的字符串编码:
字符串编码 :
- (NSString*)safeUrlBase64Encode:(NSString *)str { //因为Base64转码后可能包含有+,/,=这些不安全的URL字符串,所以要进行换字符 // '+' -> '-' // '/' -> '_' // '=' -> '' NSString * base64Str = [self base64EncodedString:str]; NSMutableString * safeBase64Str = [[NSMutableString alloc] initWithString:base64Str]; safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"+" withString:@"-"]; safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"=" withString:@""]; return safeBase64Str; }
字符串解码:
- (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]; }
写在最后
如有错误,请指教!