关于Base64编码中的‘+’ 和‘/’字符处理
来源:互联网 发布:好莱坞演技 知乎 编辑:程序博客网 时间:2024/06/16 07:06
最近遇到个问题:某些用户反馈自己的密码无法登录,于是打算从整个登录过程入手分析。
1、将密码字符串转data
2、用系统的加密方法进行3DES加密
3、用Base64编码加密之后的NSData数据,得到最终加密之后的字符串。
其中1、2两步我想都是调用苹果原生的系统方法应该不会出现问题,就把目光锁定到第3步,Base64编码方法是用网上开源的,直接拿来就用了。
开始调试异常帐号,当走到Base64编码这一步,得到的字符串中含有‘+’号,后台调试得到的字符中这个符号变为空格,这个地方明显就出问题了。
然后查看了Base64的具体编码作用:将二进制数据(NSData)表示为ASCII文本字符串,用了一个标准化的转化表格将二进制数据的没6位编码为一个字符。
发现里面有‘/’ 这个字符,我想到的就是这个字符如果出现在url里面肯定会出问题(笔者没用GET方式),于是翻开了《iOS网络高级编程》,其中第11章在讲解应用之间通信可以传递任何复杂数据的时候,讲到了'+' 和 '/'在URL中含有特别的含义,可能会导致接受方无法正确解码二进制数据。其中'+'表示空白字符串,如果数据被解释为空白会导致解析器过早终止或者解释不正确的数据,'/'表示URL的路径部分,这可能会导致解析器过早开始或者结束。
找到问题了。查看开源的Base64中指定的编码字符表,发现将所有字符组成字符串:
staticconstchar *kBase64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
果然有这两个字符吧。
解决方案:
1、通过苹果提供的URL编码Base64字符串方法:
base64EncodedDataWithOptions:
2、替换Base64(开源框架)中转化表中的编码字符
staticconstchar *kWebSafeBase64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
通过以上两种方法可以解决这个问题,独立小白必经之路,大神勿喷。
- 关于Base64编码中的‘+’ 和‘/’字符处理
- base64编码中的+号处理
- java中的字符编码处理
- 字符编码之Base64
- Base64 文件字符编码
- 深入理解Python中的字符编码、文件处理和函数
- 关于base64编码的原理和实现
- 关于base64编码的原理和实现
- 字符编码检测和处理
- 关于js中用base64编码处理中文的问题
- 关于字符集 和 字符编码
- 关于字符集和字符编码
- 字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
- 字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
- 关于Base64编码(转载)
- 关于Base64编码的
- 关于Base64编码
- 关于Base64编码
- ssl双向认证和单向认证原理
- 7种实现下划线的方法
- 1619-7 张良 十二月四号总结 [连续第六十五天]
- 线性表之顺序存储结构(C语言动态数组实现)
- CUIT 2016 新生训练题第一周 A - 大菲波数
- 关于Base64编码中的‘+’ 和‘/’字符处理
- GoogleDrive上传、下载word,查看历史版本
- Spring Bean装配之基于Java的容器注解说明——@ImportResource和@Value
- 简单的游标
- 第14周 项目6-判断是否为二叉排序树
- 数组在内存中的变化
- MYSQL自己平时会用到的一些函数(不间断更新)
- 关于审题
- EventBus 消息处理框架