iOS Base64URL编码 等同于java中的Base64.URL_SAFE | Base64.NO_WRAP | Base64.NO_PADDING
一. iOS Base64URL编码:
java中,在进行base64编码时会看到相似如下代码:
String result = Base64.encodeToString(bytedata, Base64.URL_SAFE | Base64.NO_WRAP | Base64.NO_PADDING);
其中参数的含义是:
URL_SAFE:安全的URL编码,base64转码过程中会生成“+”,“/”,“=”这些会被URL进行转码的特殊字符,导致前后端数据不同,所以需要将这些字符替代为URL不会进行转码的字符,保证数据同步; "-" -> "+" "_" -> "/" NO_WRAP:不换行 NO_PADDING:"="号补齐去除,base64会对字符进行串长度余4的"="的补位,需去除"="。
这些功可以都是android.utils.Base64中自带的
在iOS中没有,所以我们只可以自己动手了~
Swift代码:
//MARK: Data转Base64URL加密internal class func convertByte(bytedata:Data?) -> String { guard let bytedata = bytedata else { return "" } // data数据进行base64加密 guard let result = bytedata.base64EncodedString() else { return "" } // %替换为_ let result4 = result.replacingOccurrences(of: "%", with: "_") // =替换为空 let result1 = result4.replacingOccurrences(of: "=", with: "") // +替换为— let result2 = result1.replacingOccurrences(of: "+", with: "-") // /替换为_ let result3 = result2.replacingOccurrences(of: "/", with: "_") return result3}//MARK: 后端反回的base64字符串转为datainternal class func convertBase64URL(base64:String?) -> Data? { guard let base64 = base64 else { return nil } // -替换为+ let base64Str = base64.replacingOccurrences(of: "-", with: "+") // _替换为/ let base64Str2 = base64Str.replacingOccurrences(of: "_", with: "/") var base64Str3 = "" // =号补全 let mod4 = base64Str.count % 4 if mod4 > 0 { let appStr = ("====" as NSString).substring(to: (4 - mod4)) base64Str3 = base64Str2 + appStr } // base64Str转data并进行Base64Decoding return Data(base64Encoded: base64Str3, options: Data.Base64DecodingOptions.init(rawValue: 0))}
OC:
//MARK: 将saveBase64编码中的"-","_"字符串转换成"+","/",字符串长度余4倍的位补"="+(NSData*)safeUrlBase64Decode:(NSString*)safeUrlbase64Str{ // '-' -> '+' // '_' -> '/' // 不足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)]]; NSLog(@"Base64原文:%@", base64Str); return [GTMBase64 decodeData:[base64Str dataUsingEncoding:NSUTF8StringEncoding]]; }//MARK: 由于Base64编码中包含有+,/,=这些不安全的URL字符串,所以要进行换字符+(NSString*)safeUrlBase64Encode:(NSData*)data{ // '+' -> '-' // '/' -> '_' // '=' -> '' NSString * base64Str = [GTMBase64 stringByEncodingData:data]; NSMutableString * safeBase64Str = [[NSMutableString alloc]initWithString:base64Str]; safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"+" withString:@"-"]; safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"=" withString:@""]; NSLog(@"safeBase64编码:%@", safeBase64Str); return safeBase64Str;}
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS Base64URL编码 等同于java中的Base64.URL_SAFE | Base64.NO_WRAP | Base64.NO_PADDING
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS Base64URL编码 等同于java中的Base64.URL_SAFE | Base64.NO_WRAP | Base64.NO_PADDING