美文网首页
iOS端加密传输对空格和加号的处理

iOS端加密传输对空格和加号的处理

作者: iOS小乔 | 来源:发表于2019-08-27 18:31 被阅读0次

    一、“+”变空格的问题

    在项目开发中,如果碰到“+”出现进行加密传输到服务器时,会出现+空格的问题,而在服务器端真正的加号会被转化为%2B

    二、解决思路

    假设现在对 NSString *encodString = @"测试 +你好";进行加密。

    1、我们可以先对“空格”不进行处理。
    2、使用stringByAddingPercentEncodingWithAllowedCharacters方法,对自定义的
    "~?!@#$^&%+,:;='\"`<>()[]{}/\\|\n\r?!@#$^&%*+,:;='\"`<>()[]{}/\\|\n"
    

    加密字符进行加密,这时是对用户真正输入的+进行加密,代码如下:

    NSString * encodedStringResult = [encodString stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"?!@#$^&%*+,:;='\"`<>()[]{}/\\|\n"] invertedSet]];
    
    3、再将加密之后的encodedStringResult进行空格符转化为+即可
    encodedStringResult = [encodedStringResult stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    

    完整代码:

    NSString *encodString = @"测试 +你好";
    //先将+处理成%2B,对空格不进行处理
    NSString * encodedStringResult = [encodString stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"~?!@#$^&%+,:;='\"`<>()[]{}/\\|\n\r"] invertedSet]];
    //再将空格处理成+
    encodedStringResult = [encodedStringResult stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    

    注意,在此问题解决方法中千万不要使用CFURLCreateStringByAddingPercentEscapes进行加密操作,因为CFURLCreateStringByAddingPercentEscapes内部直接将空格转化为了%20,并且这个方法在iOS9之后已经废弃使用了!!!

    相关文章

      网友评论

          本文标题:iOS端加密传输对空格和加号的处理

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