URL安全的Base64编码,解码
Base64 可以将二进制转码成可见字符方便进行http传输,但是base64转码时会生成“+”,“/”,“=”这些被URL进行转码的特殊字符,导致两方面数据不一致。
我们可以在发送前将“+”,“/”,“=”替换成URL不会转码的字符,接收到数据后,再将这些字符替换回去,再进行解码。
Base64加密转换原理与代码实现 :http://www.cnblogs.com/jxust-jiege666/p/8590116.html
PHP:
/** * URL base64解码 * '-' -> '+' * '_' -> '/' * 字符串长度%4的余数,补'=' * @param unknown $string */ public static function urlsafe_b64decode($string) { $data = str_replace(array('-','_'),array('+','/'),$string); $mod4 = strlen($data) % 4; if ($mod4) { $data .= substr('====', $mod4); } return base64_decode($data); } /** * URL base64编码 * '+' -> '-' * '/' -> '_' * '=' -> '' * @param unknown $string */ function urlsafe_b64encode($string) { $data = base64_encode($string); $data = str_replace(array('+','/','='),array('-','_',''),$data); return $data; }
OC:
#pragma - 将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 % ; if(mod4 > ) [base64Str appendString:[@"====" substringToIndex:(-mod4)]]; NSLog(@"Base64原文:%@", base64Str); return [GTMBase64 decodeData:[base64Str dataUsingEncoding:NSUTF8StringEncoding]]; } #pragma - 因为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; }
Java:
public static String safeUrlBase64Encode(byte[] data){ String encodeBase64 = new BASE64Encoder().encode(data); String safeBase64Str = encodeBase64.replace('+', '-'); safeBase64Str = safeBase64Str.replace('/', '_'); safeBase64Str = safeBase64Str.replaceAll("=", ""); return safeBase64Str; } public static byte[] safeUrlBase64Decode(final String safeBase64Str){ String base64Str = safeBase64Str.replace('-', '+'); base64Str = base64Str.replace('_', '/'); int mod4 = base64Str.length()%4; if(mod4 > 0){ base64Str = base64Str + "====".substring(mod4); } return new BASE64Decoder().decodeBuffer(base64Str); }
如果是Android的话,android.utils.Base64自带该功能:
Base64.encodeToString(encrypted, Base64.URL_SAFE|Base64.NO_WRAP)
Base64.decode(data, Base64.URL_SAFE);
URL安全的Base64编码,解码的更多相关文章
- URL安全的Base64编码
Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码, 1 1.1. 子模式 urlsafe Or url ...
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码,1 1.1. 子模式 urlsafe Or url u ...
- 王小胖之 Base64编码/解码
使用场景:编码网址作为URL参数,简单编码或加密数据,下载地址生成或解析. 实现功能:BASE64在线编码和解码. 数据实例:王小胖好啊,王小胖顶呱呱!! ~~ english 123 !@#$%^& ...
- OpenSSL 使用 base64 编码/解码
简述 关于 OpenSSL 的介绍及安装请参见:Windows下编译OpenSSL 下面主要介绍有关 OpenSSL 使用 base64 编码/解码. 简述 编码解码 更多参考 编码/解码 #incl ...
- 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Javascript中Base64编码解码的使用实例
Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ...
- delphi Base64编码/解码及数据压缩/解压知识
一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...
- Code:Base64 编码/解码
ylbtech-Code:Base64 编码/解码 1. C#返回顶部 1.编码 byte[] inArray = new byte[msgTxt.Length]; int x; ; x < m ...
- 原来浏览器原生支持JS Base64编码解码 outside of the Latin1 range
原来浏览器原生支持JS Base64编码解码 « 张鑫旭-鑫空间-鑫生活 https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-bto ...
随机推荐
- [Vue warn]: Duplicate keys detected: '1'. This may cause an update error
今天遇到这个问题,遇到这个问题多数因为:key值的问题 第一种情况(key重复) <div class="name-list" v-for="(item,index ...
- CentOS7 部署zabbix4.2
zabbix我就不介绍了吧,但是可能又有些小白,我还是介绍一下吧,嘿嘿! 一:什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提 ...
- Android 开发 重写定位器类Timer与TimerTask
class AttendanceTimer extends Timer { private static final int LOCATION = 0x01; private static final ...
- abp.net zero 运行报500.21,错误模块AspNetCoreModuleV2
关于这个运行时提示的问题,导致项目无法运行,之前我是遇到过的,也是查了很久最后解决了 但忘记记录了...岁数大了脑袋不好用了...这次依然找了各种方案,有很多都说由于net core 不是最新的,但我 ...
- MSMQ—确认队列和响应队列
一.MSMQ——消息的响应(响应队列) 如果需要从接收程序中获得比确认消息更多的信息(消息确认参考二),就可以使用响应队列.响应队列类似于一般队列,但原始发生程序吧该队列用作接收程序,原始接收 程序把 ...
- kettle中文乱码问题
db连接->选项 配置参数 characterEncoding,设置值为gbk/utf8.
- stm32 HAL库笔记(一)——串口的操作
昨天分析了普通io口的使用,和初始化代码流程,回顾一下,首先定义一个配置io口功能的结构体,然后开启时钟,再去配置这个结构体里面的各个成员变量,每个成员变量都有很多种选择,可以看各个成员变量 后面的注 ...
- python大法好——ython GUI编程(Tkinter)
Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...
- [JavaScript,Java,C#,C++,Ruby,Perl,PHP,Python][转]流式接口(Fluent interface)
原文:https://en.m.wikipedia.org/wiki/Fluent_interface(英文,完整) 转载:https://zh.wikipedia.org/wiki/流式接口(中文, ...
- 【CZYZ 20160819】背包
题目描述 蛤布斯有nn个物品和一个大小为mm的背包,每个物品有大小和价值,它希望你帮它求出背包里最多能放下多少价值的物品. 输入数据 第一行两个整数 n,mn,m. 接下来 nn 行每行两个整数 xi ...