Base64编码可用于在HTTP环境下传递较长的标识信息。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的「/」和「+」字符变为形如「%XX」的形式,而这些「%」号在存入数据库时还需要再进行转换,因为ANSI SQL中已将「%」号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的「+」和「/」分别改成了「*」和「-」,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

URL安全的Base64编码适用于以URL方式传递Base64编码结果的场景。该编码方式的基本过程是先将内容以Base64格式编码为字符串,然后检查该结果字符串,将字符串中的加号+换成中划线-,并且将斜杠/换成下划线_

详细编码规范请参考RFC4648标准中的相关描述。

补充:对于末尾的“=”占位符,Bouncy Castle将之用.代替,而Commons Codes杜绝任何的补位符。下面的示例代码使用了Bouncy Castle的方法,将“=”用“.”代替。

用于URL的改进版Base64编码C#实现:

/// <summary>
       /// 从二进制字符转换为适用于URL的Base64编码字符串
       /// < /summary>
       public static string ToBase64StringForUrl(byte[] token)
       {
           return Convert.ToBase64String(token).Replace('+', '*')
               .Replace('/', '-')
               .Replace('=', '.');
       }

URL安全的Base64编码相关推荐

  1. java url安全的base64编码_URL安全的Base64编码

    Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...

  2. data类型的Url格式及Base64编码:把小数据直接嵌入到Url中

    所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...

  3. 编解码:Base64编码在URL中的应用

    项目查询背景:目前项目中,本地文件全部使用UTF-8进行编码,Android网络访问全部采用Base64加密传输,因此考虑Base64和Url编码是否会有冲突,查询的结果是没有冲突,可以直接放在Url ...

  4. Base64编码及Android的应用

    简介 Base64编码是一种编码方式,可以把二进制数据编码为可见的字符数据,包含64个字符,A-Z, a-z,0-9,+,/,除此之外还有一个填充字符是后缀等号'='. 由于Base64编码是六位一个 ...

  5. Base64编码原理与应用

    本文内容转自网络,如需详细内容,请参考相关网址. http://my.oschina.net/goal/blog/201032 代码参考:http://blog.csdn.net/prsniper/a ...

  6. php将上传的图片转为base64,html5实现把上传的图片转成base64编码在显示(代码实例)...

    本章给大家介绍html5实现把上传的图片转成base64编码在显示(代码实例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 首先我们来详细的看一看base64编码: 什么是bas ...

  7. mysql 图片base64_关于图片的Base64编码

    什么是Base64编码 Base64编码是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的url属性. base64编码就是长得像下面这样子的代 ...

  8. python兼容js base64_前端base64编码的坑

    故事背景: 前后端每次通讯的时候,需要验证sign,这个sign经过了b64_md5两步骤操作. 在python端,生成sign的代码如下: import md5 import base64 m = ...

  9. Base64编码解码

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 可用于网络传输二进制数据(图片,文件...),将二进制转为Base6 ...

最新文章

  1. 网吧网管在自杀前的遗书
  2. java使用jsp servlet来防止csrf 攻击的实现方法
  3. 北京内推 | 华为CloudAI机器视觉产品部招聘计算机视觉见习研究员
  4. “玩转标签,发现层次的力量!”:跨模态哈希方法研究
  5. 鸿蒙系统天气,墨迹天气携手鸿蒙系统 以精细化气象服务助力全场景生态建设...
  6. 物联网(车联网)平台架构方案
  7. 查看进程占用,并kill掉
  8. pure-ftp 修改用户信息
  9. 比特币白皮书 Bitcoin: A Peer-to-Peer Electronic Cash System
  10. 自动化运维之 - puppet 服务端安装
  11. EF里查看/修改实体的当前值、原始值和数据库值
  12. 对比学习Python实现
  13. 如何自学软件编程?零基础自学编程入门指南
  14. Spring常用注解
  15. URL中中文转码和解码
  16. 给领导干部讲计算机课的开场,学习计算机课程的心得(1)讲课讲稿.pdf
  17. c语言sizeof用法计算char,C语言里sizeof(char)是什么意思
  18. <机器学习>支持向量机(SVM)理论
  19. python 实例 cadu_求CAD实例
  20. 【Qzone】向来缘浅 奈何情深 第三步 编译Android内核源代码

热门文章

  1. Java如何简单实现一个定时器
  2. 接口测试--apipost在json中如何使用mock变量
  3. 性能测试之JMeter测试结果写入Excel
  4. 03-13 微信小程序自动化测试
  5. linux如何重启syslog服务,Linux syslog服务
  6. python能开发android吗_python可以开发安卓吗
  7. 服务器x不会下载mysql_MySQL_解决MySQL数据库死掉以及拒绝服务的方法,从Mysql 5.x的某个版本之后,MySQ - phpStudy...
  8. 比较ipv6有状态与无状态地址分配工作特点_IPv6环境获取IPV6地址,无状态地址分配,一分钟了解下...
  9. Oracle count函数原理,oracle count函数
  10. python分析政策实施前后_用Python分析春节前后的中国A股市场行情(附源代码)