美文网首页swift
URL安全的标准Base64编码和解码问题

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

作者: Eugene_iOS | 来源:发表于2016-12-23 18:01 被阅读612次
标准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];
}

写在最后

如有错误,请指教!

相关文章

  • iOS URL安全的Base64编码、解码

    参考iOS开发探索-Base64编码iOS URL编码&base64编码URL安全的Base64编码,解码 为什么...

  • Node.js URL安全的Base64编码

    由于标准的Base64包含+、/和=,直接将标准Base64编码后的字符串放到url中会有问题。于是便有URL安全...

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

    Base64是一种用64个字符对任意数据进行编码,表示任意二进制数据的方法。 Base64编解码时需要注意的问题 ...

  • 最新kali之Bash base64 编码和解码

    为了对标准输入/输出或任何文件内容进行编码或解码,Linux 使用 base64 编码和解码系统。对数据进行编码和...

  • base64编解码介绍

    base64编解码介绍 使用   最近在工作中遇到了需要在url中传递参数的问题, 所以用到了base64编码. ...

  • base64

    Python内置的base64可以直接进行base64的编解码: 由于标准的Base64编码后可能出现字符+和/,...

  • 加密编码总结

    url编码 base64编码 工作中碰到url与base64配合加解密的问题,base64编码后的字符串中可能含有...

  • node.js进阶【19】:base64 编码解码

    base64 编码解码 一、普通字符串 编码解码: 二、编码解码并转成hex 三、编码解码图片

  • iOS开发之Base64编码与解码

    原理: 调用Base64编码与解码 //64编码 //64解码

  • Java8 Base64

    Base64 已加入到Java8官方库中,且支持 URL 和 MINE 编码解码:Base64.getUrlEnc...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/rnbkvttx.html