Base64编码

独立博客文章链接:http://zhuyanfeng.com/archives/119

这两天的工作需要以HTTP方式调用某厂商的彩信接口,其中彩信内容需要进行Base64编码,然后将其中的“+”号以“_”代替,将“=”以“%”代替。这是我第一次接触Base64编码,今天初步学习了一下,以完成工作为目标,并没有深入。以下内容整理自“百度百科”和“WiKiPedia”。

Base64简介

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个bit作为一个单元,对应某个可打印字符(如000000对应字母A、000001对象字母B)。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。Base64索引表如:


三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。例如采用Base64编码“Man”:

Base64在URL中的应用

Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java持久化系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

但是标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。为解决此类问题,可采用一些用于URL的改进Base64编码,主要是对“+”等字符做一些替换。比如我现在做的工作中,通过HTTP调用某家厂商的彩信群发接口,其中彩信内容需要进行Base64编码,并将“+”替换为“_”,将“=”替换为“%”。

Base64还经常用于在下载软件中加密下载地址。以“迅雷”为例,很多下载类网站都提供“迅雷下载”的链接,其地址通常是经过加密的迅雷专用下载地址。如:

thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg==

其实迅雷的“专用地址”也是用Base64加密的,其加密过程如下:

一、在地址的前后分别添加AA和ZZ,如:

www.baidu.com/img/sslm1_logo.gif

变成

AAwww.baidu.com/img/sslm1_logo.gifZZ

二、对新的字符串进行Base64编码得到:

QUF3d3cuYmFpZHUuY29tL2ltZy9zc2xtMV9sb2dvLmdpZlpa

三、在上面得到的字符串前加上“thunder://”

就成了:

thunder://QUF3d3cuYmFpZHUuY29tL2ltZy9zc2xtMV9sb2dvLmdpZlpa

另:Flashget与迅雷类似,只不过在第一步时加的“料”不同罢了,Flashget加的是[FLASHGET],而QQ旋风的下载地址干脆不加料,直接就对地址进行Base64编码了。

Base64与MIME及Base64的其它用途

在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。

(MIME:多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。)

下面是Base64的一些其它应用:

(1)Mozilla Thunderbird和Evolution用Base64来保密电子邮件密码

(2)Base64 也会经常用作一个简单的“加密”来保护某些数据,而真正的加密通常都比较繁琐。

(3)垃圾讯息传播者用Base64来避过反垃圾邮件工具,因为那些工具通常都不会翻译Base64的讯息。

(4)在LDIF档案,Base64用作编码字串。

Base64编解码的实现

对于Base64,自己用的不多,只是完成目前的彩信接口调用即可,没必要重新发明轮子。另外,在OpenSSL中有Base64编解码性能颇佳的成熟实现,不过OpenSSL自己也不熟,所以直接采用了一些网友的c/c++实现。(OpenSSL是一套开放源代码的SSL套件,其函数库由C语言实现,完成了基本的传输层数据加密功能。SSL是Secure Socket Layer(安全套接层协议)的缩写)。

下面贴出一些Base64编解码实现的源地址(感谢这些作者):

(1)http://www.adp-gmbh.ch/cpp/common/base64.html

(2)http://blog.youkuaiyun.com/medie/article/details/365400

(3)http://www.cnblogs.com/phinecos/archive/2008/10/10/1308272.html


内容概要:本文深入探讨了多种高级格兰杰因果检验方法,包括非线性格兰杰因果检验、分位数格兰杰因果检验、混频格兰杰因果检验以及频域因果检验。每种方法都有其独特之处,适用于不同类型的时间序列数据。非线性格兰杰因果检验分为非参数方法、双变量和多元检验,能够在不假设数据分布的情况下处理复杂的关系。分位数格兰杰因果检验则关注不同分位数下的因果关系,尤其适合经济数据的研究。混频格兰杰因果检验解决了不同频率数据之间的因果关系分析问题,而频域因果检验则专注于不同频率成分下的因果关系。文中还提供了具体的Python和R代码示例,帮助读者理解和应用这些方法。 适合人群:从事时间序列分析、经济学、金融学等领域研究的专业人士,尤其是对非线性因果关系感兴趣的学者和技术人员。 使用场景及目标:①研究复杂非线性时间序列数据中的因果关系;②分析不同分位数下的经济变量因果关系;③处理不同频率数据的因果关系;④识别特定频率成分下的因果关系。通过这些方法,研究人员可以获得更全面、细致的因果关系洞察。 阅读建议:由于涉及较多数学公式和编程代码,建议读者具备一定的统计学和编程基础,特别是对时间序列分析有一定了解。同时,建议结合具体案例进行实践操作,以便更好地掌握这些方法的实际应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值