base64

合集下载

base64解析

base64解析

base64解析
base64编码是一种用64个字符来表示任意二进制数据的方法。

它是一种简单
的文本编码方式,可以将任何类型的文本或二进制数据编码为文本文件,例如电子邮件附件,图像文件或其他二进制数据文件。

Base64编码的性质非常强,使用
base64编码可以将任何字符、数字和控制字符统一转换为64个字符组成的字符串,比其他任何字符串编码都要有效得多,以节省空间,保护数据完整性,防止数据泄漏。

Base64编码的优点很多,首先,它有效地解决了字符编码的繁琐问题,编码
规则简洁易懂,能够有效缩短图片信息在文件传输过程中的传输时间和存储空间。

它还支持大多数常用浏览器,并且极其方便,可以简单方便地对图片文件和文本文件进行编解码,从而能够轻松地实现图片保护,确保数据的真实性,避免图片被破解和失真。

总之,base64编码是一种强大,有效,安全的编码方式,在文件传输、信息加密和从字符串或二进制数据文件提取信息等方面都有重要作用,今后传输文件和安全传输信息将会更加容易,更安全。

Base64简单介绍

Base64简单介绍

Base64简单介绍本⽂科普数据处理中常⽤的Base64相关知识,包括Base64编码⽅案的内部细节、特征及应⽤,⽂章末还提供了iOS和JavaScript 版本的Base64编码和解码⽅案。

Base64编码⽅案介绍Base64是⼀种基于64个可打印字符来表⽰⼆进制数据的表⽰⽅法,简单点说就是Base64编码⽅案可以使⽤由64个指定字符的排列组合⽅式来表⽰所有的⼆进制数据。

Base64可以⽤作电⼦邮件的传输编码,常⽤于处理(表⽰、传输和存储)⽂本数据的业务场景中,在⽹络安全数据处理⽅⾯有应⽤。

下⾯我们使⽤电脑中的命令⾏⼯具先简单感受下Base64的编码⽅式(我⾃⼰使⽤的Mac OSX系统的终端,如果是windows操作系统可以下载)。

①编码⽂件wendingding:Demo wendingding$ base64 123.png -o 123.textwendingding:Demo wendingding$ cat 123.textiVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAEGWlDQ1BrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lpurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZPC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q44WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23BaIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrlSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98hTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7ClP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmKPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZfsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19zn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNCUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KTYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyAgccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/qwBnjX8BoJ98VQNcC+8AAAAkSURBVCgVY2RkZPzPQAXARAUzwEaMGkQ4JEfDaDSMCIcAYRUAPhgBHp0GsDQAAAAASUVORK5CYII=wendingding:Demo wendingding$ base64 123.text -D -o new.pngwendingding:Demo wendingding$ tree -L 2.├── 123.png├── 123.text└── new.pngwendingding:Demo wendingding$ md5 123.pngMD5 (123.png) = 314e5198b3d2da9fbfb0d85c398bcbe2wendingding:Demo wendingding$ md5 new.pngMD5 (new.png) = 314e5198b3d2da9fbfb0d85c398bcbe2在上⾯的演⽰中我们⾸先对Demo⽂件⽬录下的123.png⽂件(图⽚)进⾏base64编码,把结果保存到123.text⽂件后⼜对123.text⽂件进⾏base64解码操作,并最终匹配解码后得到的⽂件和源⽂件。

base64前缀

base64前缀

base64前缀Base64前缀是一种用于数据预处理的常用方法,它将原始数据转换成一种特殊的编码格式,以以便用于另一种应用程序的处理过程。

它的主要目的是减少变换后的数据的体积,以便可以更快传输和存储。

同时,减少数据量也可以带来安全性上的收益,因为解码后的数据通常是不可读的,也更难破解。

Base64前缀的历史可以追溯到20世纪50年代,当时已经出现了一种可以将一系列字母和数字转换成自然语言字符串的方法,叫做Base64前缀。

在某种程度上,这也是受到火箭科学家迈克尔阿特伍德(Michael Atwood)的启发,他发明了用于表达字母和数字的算法。

Base64前缀的最初形式使用了3个字节来表示一个字符,即6位可用于存储字符的2进制位。

以这种方式,它可以将每个字符的6位数据转换成四个字符(4字节)的格式。

当它被应用于电子邮件系统时,它可以用于使用“8-bit”字符编码的电子邮件系统,以及使用16-bit Unicode编码的系统。

随着Base64前缀的发展,它不仅仅用于电子邮件系统,也用于多种其他应用程序,例如网络应用程序,图像处理和储存器数据库系统。

在这些应用程序中,Base64前缀用于减小数据量,以便数据可以更轻松地传输给其他计算机。

它也可以用于保护数据,因为它可以把可读数据转换成不可读的格式,从而使得数据更难被窃取。

Base64前缀也有一些缺点,其中最常见的是,转换后的数据体积会变得更大。

如果数据中包含不适合Base64前缀转换的字符,这种情况尤其明显。

此外,Base64前缀解码有时会非常慢,因为它需要计算编码的字符串的位数,以及将其转换为每个字符的二进制位。

总的来说,Base64前缀是一种有效的数据预处理方法,它可以减小数据的体积,让数据传输和存储更加容易,并且也可以提供一定的数据安全保护。

然而,在某些情况下,它实际上可能增加数据量,并且可能会非常慢。

因此,当使用Base64前缀时,应该仔细考虑适用于当前情况的最佳解决方案。

读懂Base64编码

读懂Base64编码

读懂Base64编码我们知道⼀个字节可表⽰的范围是 0 ~ 255(⼗六进制:0x00 ~ 0xFF),其中 ASCII 值的范围为 0 ~ 127(⼗六进制:0x00 ~0x7F);⽽超过 ASCII 范围的 128~255(⼗六进制:0x80 ~ 0xFF)之间的值是不可见字符。

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的⼀套电脑编码系统。

它主要⽤于显⽰现代英语,⽽其扩展版本延伸美国标准信息交换码则可以部分⽀持其他西欧语⾔,并等同于国际标准 ISO/IEC 646。

在 ASCII 码中 0 - 31和 127 是控制字符,共 33 个。

其余 95 个,即 32 - 126 是可打印字符,包括数字、⼤⼩写字母、常⽤符号等。

当不可见字符在⽹络上传输时,⽐如说从 A 计算机传到 B 计算机,往往要经过多个路由设备,由于不同的设备对字符的处理⽅式有⼀些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。

为了解决这个问题,我们可以先对数据进⾏编码,⽐如 base64 编码,变成可见字符,也就是 ASCII 码可表⽰的可见字符,从⽽确保数据可靠传输。

Base64 的内容是有 0 ~ 9,a ~ z,A ~ Z,+,/ 组成,正好64 个字符,这些字符是在 ASCII 可表⽰的范围内,属于 95 个可见字符的⼀部分。

⼆、什么是 base64Base64是⼀种基于 64 个可打印字符来表⽰⼆进制数据的表⽰⽅法。

由于 2⁶ = 64 ,所以每 6 个⽐特为⼀个单元,对应某个可打印字符。

3个字节有 24 个⽐特,对应于 4 个 base64 单元,即 3 个字节可由 4 个可打印字符来表⽰。

相应的转换过程如下图所⽰:Base64 常⽤于在处理⽂本数据的场合,表⽰、传输、存储⼀些⼆进制数据,包括 MIME 的电⼦邮件及 XML 的⼀些复杂数据。

base64编解码

base64编解码
base64编解码
BASE64编码是一种常用的将二进制数据转换为可打印字符的编码。与HEX显示相比,它占用的空间较小。BASE64编码在RFC 3548(参见扩展阅读)中定义。
1、base64编解码原理
将数据编码成BASE64编码时,以3字节数据为一组,转换为24bit的二进制数,将24bit的二进制数分成四组,每组6bit。对于每一组,得到一个数字:0-63。然后根据这个数字查表即得到结果。表如下:
a
42
q
58
6
11
L
27
b
43
r
59
7
12
M
28
c
44
s
60
8
13
N
29
d
45
t
61
9
14
O
30
e
46
u
62
+
15
P
31
f
47
v
63
/
比如有数据:0x30 0x82 0x02
编码过程如下:
1)得到16进制数据:30 82 02
2)得到二进制数据:00110000 10000010 00000010
3)每6bit分组:001100 001000 001000 000010
3)输入数据最后编码是2个字节(输入数据字节数除3余2),则需要填充1个"=",因为补齐6比特,需要加一个00。
举例如下:
对0x30编码:
1) 0x30的二进制为:00110000
2)分组为:001100 00
3)填充2个00:001100 000000
4)得到数字:12 0Байду номын сангаас

base64加密原理

base64加密原理

base64加密原理
Base64是一种用64个字符来表示任意二进制数据的方法,由A-Z、a-z、0-9、+和/四个字符来表示数字,码字和符号,这样一来,三个
字节就可以表示4个字符,也就是说,Base64可以把3个字节的二进
制数据编码为4个字符,长度增加33%,所以编码后的文本数据会比原
来的文本数据长一点。

Base64可以将文本、音频、视频等数据编码为一种可用的形式,
使其可以在非文本环境中传输。

Base64可以用来编码字符串、数字、
网络和文件,以及 8 位字节的二进制数据,诸如图像和声音文件等。

Base64的加密原理如下:
Base64的编码过程是先将数据按位分割成 6 位二进制数,再将其
转换为相应的Base64字符,最后拼接成字符串。

特别地,当待编码的
二进制数据不能被 6 整除时,就会在最后补 0,补齐6位,然后再转
换成 Base64 编码。

Base64 的解码过程刚好和编码正好相反,先将字符串拆分成单个
字符,然后根据 ASCII 表将单个 Base64 字符转换为其二进制形式,
最后将二进制连接起来就可以恢复出原始数据。

Base64算法

Base64算法

Base64算法简介Base64是⽹络上最常见的⽤于传输8Bit字节码的可读性编码算法之⼀。

所谓Base64,即是说在编码过程中使⽤了64种字符:⼤写A到Z、⼩写a到z、数字0到9、“+”和“/”。

可读性编码算法不是为了保护数据的安全性,⽽是为了可读性。

可读性编码不改变信息内容,只改变信息内容的表现形式。

Base58是Bitcoin(⽐特币)中使⽤的⼀种编码⽅式,主要⽤于产⽣Bitcoin的钱包地址,相⽐Base64,Base58不使⽤数字"0",字母⼤写"O",字母⼤写"I",和字母⼩写"i",以及"+"和"/"符号。

原理base64 是3个字节为⼀组,⼀个字节 8位,⼀共就是24位,然后,把3个字节转成4组,每组6位,3 * 8 = 4 * 6 = 24,每组6位,缺少的2位,会在⾼位进⾏补0 ,这样做的好处在于,base取的是后⾯6位,去掉⾼2位,那么base64的取值就可以控制在0-63位了,所以就叫base64,111111 = 32 + 16 + 8 + 4 + 2 + 1 = 63,再加上全0的,总共64。

映射表⽰例"abc"和"中"都为3个字节,共24位,24 / 6 = 4,因此进⾏Base64编码后,输出4个字符。

分析:abc在ASCII表对应的字节数组是97,98,99,⼆进制数为01100001,01100010,01100011,按照规则6个⼀组划分后为011000,010110,001001,100011,⾼位补0后为00011000,00010110,00001001,00100011,对应的byte数为24,22,9,35,映射表查找,对应字符为YWJjSystem.out.println(Base64.encode("abc".getBytes()));//YWJjSystem.out.println(Base64.encode("中".getBytes()));//5Lit⼤家可能发现⼀个问题,咱们的base64有时候会有个 = 号,但是在映射表⾥⾯没有发现 = 号,这个地⽅需要注意,等号⾮常特殊,因为base64是三个字节⼀组,如果当我们的位数不够的时候,会使⽤等号来补齐。

base64 解码 原理

base64 解码 原理

base64 解码原理
Base64是一种编码方式,它将二进制数据转换为可打印字符
的ASCII格式。

其原理如下:
1. 将待编码的数据划分为连续的24位(即3个字节)的分组。

2. 将每个24位的分组划分为4个6位的子分组。

3. 根据Base64编码表,将每个6位的子分组转换为对应的可
打印字符。

4. 如果最后的输入数据长度不足3个字节,会进行填充操作。

一般使用'='字符进行填充。

这样,在Base64编码中,一个3字节的二进制数据通过编码
后会变成4个字符,并且编码后的数据长度总是为4的倍数。

当需要对Base64编码进行解码时,可以按照以下步骤进行:
1. 将待解码的数据划分为连续的4个字符的分组。

2. 根据Base64解码表,将每个字符的编码值转换为对应的6
位二进制数据。

3. 将每个6位的子分组合并为一个24位的分组。

4. 将每个24位的分组划分为3个8位的子分组,并转换为对
应的字节数据。

5. 如果解码后的数据长度大于待解码的数据长度,则剔除填充的字节。

通过以上步骤,就可以将Base64编码的数据解码回原始的二
进制数据。

需要注意的是,Base64编码只是一种编码方式,它并不对数
据进行加密或压缩。

它主要用于在文本协议中传输二进制数据,或者在文本环境中嵌入二进制数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

base64在URL中的应用VB版的Base64编码函数定义JS版的Base64编码函数定义C#实现BASE64加密、解密算法Base64-MIME在URL中的应用VB版的Base64编码函数定义JS版的Base64编码函数定义C#实现BASE64加密、解密算法Base64-MIMEBase64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。

Base64编码可用于在HTTP环境下传递较长的标识信息。

例如,在Java Persi stence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为1 28-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。

在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。

此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

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

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

另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

关于这个编码的规则:①.把3个字符变成4个字符..②每76个字符加一个换行符..③.最后的结束符也要处理..这样说会不会太抽象了?不怕,我们来看一个例子:转换前aaaaaabb ccccdddd eeffffff转换后00aaaaaa 00bbcccc 00ddddee 00ffffff应该很清楚了吧?上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。

转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:(摘自RFC2045)Table 1: The Base64 AlphabetValue Encoding Value Encoding Value Encoding Value Encoding0 A 17 R 34 i 51 z1 B 18 S 35 j 52 02 C 19 T 36 k 53 13 D 20 U 37 l 54 24 E 21 V 38 m 55 35 F 22 W 39 n 56 46 G 23 X 40 o 57 57 H 24 Y 41 p 58 68 I 25 Z 42 q 59 79 J 26 a 43 r 60 810 K 27 b 44 s 61 911 L 28 c 45 t 62 +12 M 29 d 46 u 63 /13 N 30 e 47 v14 O 31 f 48 w (pad) =15 P 32 g 49 x16 Q 33 h 50 y让我们再来看一个实际的例子,加深印象!转换前10101101 10111010 01110110转换后00101011 00011011 00101001 00110110十进制43 27 41 54对应码表中的值r b p 2所以上面的24位编码,编码后的Base64值为rbp2解码同理,把rbq2 的二进制位连接上再重组得到三个8位值,得出原码。

(解码只是编码的逆过程,在此我就不多说了,另外有关MIME的RFC还是有很多的,如果需要详细情况请自行查找。

)用更接近于编程的思维来说,编码的过程是这样的:第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。

然后将第一个字符左移4位加上第二个字符右移4位,即获得第二个目标字符。

再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。

最后取第三个字符的右6位即获得第四个目标字符。

在以上的每一个步骤之后,再把结果与0x3F 进行AND 位操作,就可以得到编码后的字符了。

可是等等……聪明的你可能会问到,原文的字节数量应该是3的倍数啊,如果这个条件不能满足的话,那该怎么办呢?我们的解决办法是这样的:原文的字节不够的地方可以用全0来补足,转换时B ase64编码用=号来代替。

这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。

因为:余数= 原文字节数MOD 3所以余数任何情况下都只可能是0,1,2这三个数中的一个。

如果余数是0的话,就表示原文字节数正好是3的倍数(最理想的情况啦)。

如果是1的话,为了让Ba se64编码是3的倍数,就要补2个等号;同理,如果是2的话,就要补1个等号。

[编辑本段]在URL中的应用Base64编码可用于在HTTP环境下传递较长的标识信息。

例如,在Java Persi stence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为1 28-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。

在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。

此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

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

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

另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

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

如thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nb y5naWZaWg==其实迅雷的“专用地址”也是用Base64加密的,其加密过程如下:一、在地址的前后分别添加AA和ZZ如/img/sslm1_logo.gif变成/img/sslm1_logo.gifZZ二、对新的字符串进行Base64编码如/img/sslm1_logo.gifZZ用Base64编码得到QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaW g==三、在上面得到的字符串前加上“thunder://”就成了thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5 naWZaWg==另:Flashget的与迅雷类似,只不过在第一步时加的“料”不同罢了,Flashget在地址前后加的“料”是[FLASHGET]而QQ旋风的干脆不加料,直接就对地址进行Base64编码了PHP中的解密下载地址的实现[下列代码仅在GBK中实现,UTF8代码请把if($button=="迅雷地址->普通地址") echo substr(base64_decode(str_ireplace("thunder://","",$txt1)),2,-2); 这句改为if($button=="迅雷地址->普通地址") echo substr(mb_convert_encoding(base64_d ecode(str_ireplace("thunder://","",$txt1))),2,-2); 并把charset=gb2312改为charset =utf-8]<?php$txt1=trim($_POST['text1']);$txt2=trim($_POST['text2']);$txt3=trim($_POST['text3']);$button=$_POST['button'];?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html><head><title>迅雷和FlashGet,QQ旋风地址地址转换工具</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta content="迅雷,FlashGet,地址转换," name="keywords"></head><body><form name="form1" method="post" action=""><hr size="1"><h3>迅雷转换</h3><P>转换地址:<input name="text1" value="<?php echo $txt1;?>" type="text" style="width: 516px;" /></P><P>转换后的:<input type="text" value="<?phpif($button=="普通地址->迅雷地址") echo "thunder://".base64_encode("AA".$t xt1."ZZ");if($button=="迅雷地址->普通地址") echo substr(base64_decode(str_ireplace ("thunder://","",$txt1)),2,-2);?>" style="width:516px;" /></P><P><input type="submit" name="button" value="普通地址->迅雷地址" /><input type="submit" name="button" value="迅雷地址->普通地址" /></P> <h3>FlashGet转换</h3><P>FlashGet地址:<input name="text2" value="<?php echo $txt2;?>" type="text" style="width: 516px;" /></P><P>转换后地址:<input type="text" value="<?phpif($button=="普通地址->FlashGet地址") echo "flashget://".base64_encode($t xt2);if($button=="FlashGet地址->普通地址") echo str_ireplace("[FLASHGET]","",b ase64_decode(str_ireplace("flashget://","",$txt2)));?>" style="width:516px;" /></P><P><input type="submit" value="普通地址->FlashGet地址" name="button" /> <input type="submit" value="FlashGet地址->普通地址" name="button" /></ P><h3>QQ旋风转换</h3><P>QQ旋风地址:<input name="text3" value="<?php echo $txt3;?>" type="text" style="width: 516px;" /></P><P>转换后地址:<input type="text" value="<?phpif($button=="普通地址->QQ旋风") echo "qqdl://".base64_encode($txt3);if($button=="QQ旋风->普通地址") echo base64_decode(str_ireplace("qqdl://", "",$txt3));?>" style="width:516px;" /></P><P><input type="submit" value="普通地址->QQ旋风" name="button" /><input type="submit" value="QQ旋风->普通地址" name="button" /></P> </form></body></html>[编辑本段]VB版的Base64编码函数定义注:其中DigestStrToHexStr为可在程序外部调用加密函数Option Explicit' Base64 Encoding/Decoding Algorithm' By: David Midkiff (mznull@)'' This algorithms encodes and decodes data into Base64' format. This format is extremely more efficient than' Hexadecimal encoding.Private m_bytIndex(0 To 63) As BytePrivate m_bytReverseIndex(0 To 255) As BytePrivate Const k_bytEqualSign As Byte = 61Private Const k_bytMask1 As Byte = 3Private Const k_bytMask2 As Byte = 15Private Const k_bytMask3 As Byte = 63Private Const k_bytMask4 As Byte = 192Private Const k_bytMask5 As Byte = 240Private Const k_bytMask6 As Byte = 252Private Const k_bytShift2 As Byte = 4Private Const k_bytShift4 As Byte = 16Private Const k_bytShift6 As Byte = 64Private Const k_lMaxBytesPerLine As Long = 152Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long) Public Function Decode64(sInput As String) As StringIf sInput = "" Then Exit FunctionDecode64 = StrConv(DecodeArray64(sInput), vbUnicode)End FunctionPrivate Function DecodeArray64(sInput As String) As Byte()Dim bytInput() As ByteDim bytWorkspace() As ByteDim bytResult() As ByteDim lInputCounter As LongDim lWorkspaceCounter As LongbytInput = Replace(Replace(sInput, vbCrLf, ""), "=", "")ReDim bytWorkspace(LBound(bytInput) To (UBound(bytInput) * 2))As Byt elWorkspaceCounter = LBound(bytWorkspace)For lInputCounter = LBound(bytInput) To UBound(bytInput)bytInput(lInputCounter) = m_bytReverseIndex(bytInput(lInputCounter))Next lInputCounterFor lInputCounter = LBound(bytInput) To (UBound(byt Input) - ((UBound(b ytInput) Mod 8) + 8)) Step 8bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) An d k_bytMask2) * k_bytShift4) + (bytInput(lInputCounter + 4) \ k_bytShift2)bytWorkspace(lWorkspaceCounter + 2) = ((bytInput(lInputCounter + 4) An d k_bytMask1) * k_bytShift6) + bytInput(lInputCounter + 6)lWorkspaceCounter = lWorkspaceCounter + 3Next lInputCounterSelect Case (UBound(bytInput) Mod 8):Case 3:bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)Case 5:bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) An d k_bytMask2) * k_bytShift4) + (bytInput(lInputCounter + 4) \ k_bytShift2)lWorkspaceCounter = lWorkspaceCounter + 1Case 7:bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) An d k_bytMask2) * k_bytShift4) + (bytInput(lInputCounter + 4) \ k_bytShift2)bytWorkspace(lWorkspaceCounter + 2) = ((bytInput(lInputCounter + 4) An d k_bytMask1) * k_bytShift6) + bytInput(lInputCounter + 6)lWorkspaceCounter = lWorkspaceCounter + 2End SelectReDim bytResult(LBound(bytWorkspace) To lWorkspaceCounter) As Byte If LBound(bytWorkspace) = 0 Then lWorkspaceCounter = lWorkspaceCou nter + 1CopyMemory VarPtr(bytResult(LBound(bytResult))), VarPtr(bytWorkspace(L Bound(bytWorkspace))), lWorkspaceCounterDecodeArray64 = bytResultEnd FunctionPublic Function Encode64(ByRef sInput As String) As StringIf sInput = "" Then Exit FunctionDim bytTemp() As BytebytTemp = StrConv(sInput, vbFromUnicode)Encode64 = EncodeArray64(bytTemp)End FunctionPrivate Function EncodeArray64(ByRef bytInput() As Byte) As StringOn Error GoTo ErrorHandlerDim bytWorkspace() As Byte, bytResult() As ByteDim bytCrLf(0 To 3) As Byte, lCounter As LongDim lWorkspaceCounter As Long, lLineCounter As LongDim lCompleteLines As Long, lBytesRemaining As LongDim lpWorkSpace As Long, lpResult As LongDim lpCrLf As LongIf UBound(bytInput) < 1024 ThenReDim bytWorkspace(LBound(bytInput) To (LBound(bytInput) + 4096)) As ByteElseReDim bytWorkspace(LBound(bytInput) To (UBound(bytInput) * 4)) As Byt eEnd IflWorkspaceCounter = LBound(bytWorkspace)For lCounter = LBound(bytInput) To (UBound(bytInput) - ((UBound(bytInp ut) Mod 3) + 3)) Step 3bytWorkspace(lWorkspaceCounter) = m_bytIndex((bytInput(lCounter) \ k_b ytShift2))bytWorkspace(lWorkspaceCounter + 2) = m_bytIndex(((bytInput(lCounter) And k_bytMask1) * k_bytShift4) + ((bytInput(lCounter + 1)) \ k_bytShift4)) bytWorkspace(lWorkspaceCounter + 4) = m_bytIndex(((bytInput(lCounter + 1) And k_bytMask2) * k_bytShift2) + (bytInput(lCounter + 2) \ k_bytShift6))bytWorkspace(lWorkspaceCounter + 6) = m_bytIndex(bytInput(lCounter + 2) And k_bytMask3)lWorkspaceCounter = lWorkspaceCounter + 8Next lCounterSelect Case (UBound(bytInput) Mod 3):Case 0:bytWorkspace(lWorkspaceCounter) = m_bytIndex((bytInput(lCounter) \ k_b ytShift2))bytWorkspace(lWorkspaceCounter + 2) = m_bytIndex((bytInput(lCounter) A nd k_bytMask1) * k_bytShift4)bytWorkspace(lWorkspaceCounter + 4) = k_bytEqualSignbytWorkspace(lWorkspaceCounter + 6) = k_bytEqualSignCase 1:bytWorkspace(lWorkspaceCounter) = m_bytIndex((bytInput(lCounter) \ k_b ytShift2))bytWorkspace(lWorkspaceCounter + 2) = m_bytIndex(((bytInput(lCounter) And k_bytMask1) * k_bytShift4) + ((bytInput(lCounter + 1)) \ k_bytShift4)) bytWorkspace(lWorkspaceCounter + 4) = m_bytIndex((bytInput(lCounter + 1) And k_bytMask2) * k_bytShift2)bytWorkspace(lWorkspaceCounter + 6) = k_bytEqualSignCase 2:bytWorkspace(lWorkspaceCounter) = m_bytIndex((bytInput(lCounter) \ k_b ytShift2))bytWorkspace(lWorkspaceCounter + 2) = m_bytIndex(((bytInput(lCounter) And k_bytMask1) * k_bytShift4) + ((bytInput(lCounter + 1)) \ k_bytShift4)) bytWorkspace(lWorkspaceCounter + 4) = m_bytIndex(((bytInput(lCounter + 1) And k_bytMask2) * k_bytShift2) + ((bytInput(lCounter + 2)) \ k_bytShift6))bytWorkspace(lWorkspaceCounter + 6) = m_bytIndex(bytInput(lCounter + 2) And k_bytMask3)End SelectlWorkspaceCounter = lWorkspaceCounter + 8If lWorkspaceCounter <= k_lMaxBytesPerLine ThenEncodeArray64 = Left$(bytWorkspace, InStr(1, bytWorkspace, Chr$(0)) - 1)ElsebytCrLf(0) = 13bytCrLf(1) = 0bytCrLf(2) = 10bytCrLf(3) = 0ReDim bytResult(LBound(bytWorkspace) To UBound(bytWorkspace))lpWorkSpace = VarPtr(bytWorkspace(LBound(bytWorkspace)))lpResult = VarPtr(bytResult(LBound(bytResult)))lpCrLf = VarPtr(bytCrLf(LBound(bytCrLf)))lCompleteLines = Fix(lWorkspaceCounter / k_lMaxBytesPerLine)For lLineCounter = 0 To lCompleteLinesCopyMemory lpResult, lpWorkSpace, k_lMaxBytesPerLinelpWorkSpace = lpWorkSpace + k_lMaxBytesPerLinelpResult = lpResult + k_lMaxBytesPerLineCopyMemory lpResult, lpCrLf, 4&lpResult = lpResult + 4&Next lLineCounterlBytesRemaining = lWorkspaceCounter - (lCompleteLines * k_lMaxBytesP erLine)If lBytesRemaining > 0 Then CopyMemory lpResult, lpWorkSpace, lBytes RemainingEncodeArray64 = Left$(bytResult, InStr(1, bytResult, Chr$(0)) - 1)End IfExit FunctionErrorHandler:Erase bytResultEncodeArray64 = bytResultEnd FunctionPrivate Sub Class_Initia lize()m_bytIndex(0) = 65 'Asc("A")m_bytIndex(1) = 66 'Asc("B")m_bytIndex(2) = 67 'Asc("C")m_bytIndex(3) = 68 'Asc("D")m_bytIndex(4) = 69 'Asc("E")m_bytIndex(5) = 70 'Asc("F")m_bytIndex(6) = 71 'Asc("G")m_bytIndex(7) = 72 'Asc("H")m_bytIndex(8) = 73 'Asc("I")m_bytIndex(9) = 74 'Asc("J")m_bytIndex(10) = 75 'Asc("K")m_bytIndex(11) = 76 'Asc("L")m_bytIndex(12) = 77 'Asc("M")m_bytIndex(14) = 79 'Asc("O") m_bytIndex(15) = 80 'Asc("P") m_bytIndex(16) = 81 'Asc("Q") m_bytIndex(17) = 82 'Asc("R") m_bytIndex(18) = 83 'Asc("S") m_bytIndex(19) = 84 'Asc("T") m_bytIndex(20) = 85 'Asc("U") m_bytIndex(21) = 86 'Asc("V") m_bytIndex(22) = 87 'Asc("W") m_bytIndex(23) = 88 'Asc("X") m_bytIndex(24) = 89 'Asc("Y") m_bytIndex(25) = 90 'Asc("Z") m_bytIndex(26) = 97 'Asc("a") m_bytIndex(27) = 98 'Asc("b") m_bytIndex(28) = 99 'Asc("c") m_bytIndex(29) = 100 'Asc("d") m_bytIndex(30) = 101 'Asc("e") m_bytIndex(31) = 102 'Asc("f") m_bytIndex(32) = 103 'Asc("g") m_bytIndex(33) = 104 'Asc("h") m_bytIndex(34) = 105 'Asc("i") m_bytIndex(35) = 106 'Asc("j") m_bytIndex(36) = 107 'Asc("k") m_bytIndex(37) = 108 'Asc("l") m_bytIndex(38) = 109 'Asc("m") m_bytIndex(39) = 110 'Asc("n") m_bytIndex(40) = 111 'Asc("o") m_bytIndex(41) = 112 'Asc("p") m_bytIndex(42) = 113 'Asc("q") m_bytIndex(43) = 114 'Asc("r") m_bytIndex(44) = 115 'Asc("s") m_bytIndex(45) = 116 'Asc("t") m_bytIndex(46) = 117 'Asc("u") m_bytIndex(47) = 118 'Asc("v") m_bytIndex(48) = 119 'Asc("w") m_bytIndex(49) = 120 'Asc("x") m_bytIndex(50) = 121 'Asc("y")m_bytIndex(52) = 48 'Asc("0")m_bytIndex(53) = 49 'Asc("1")m_bytIndex(54) = 50 'Asc("2")m_bytIndex(55) = 51 'Asc("3")m_bytIndex(56) = 52 'Asc("4")m_bytIndex(57) = 53 'Asc("5")m_bytIndex(58) = 54 'Asc("6")m_bytIndex(59) = 55 'Asc("7")m_bytIndex(60) = 56 'Asc("8")m_bytIndex(61) = 57 'Asc("9")m_bytIndex(62) = 43 'Asc("+")m_bytIndex(63) = 47 'Asc("/")m_bytReverseIndex(65) = 0 'Asc("A") m_bytReverseIndex(66) = 1 'Asc("B") m_bytReverseIndex(67) = 2 'Asc("C") m_bytReverseIndex(68) = 3 'Asc("D") m_bytReverseIndex(69) = 4 'Asc("E") m_bytReverseIndex(70) = 5 'Asc("F") m_bytReverseIndex(71) = 6 'Asc("G") m_bytReverseIndex(72) = 7 'Asc("H") m_bytReverseIndex(73) = 8 'Asc("I")m_bytReverseIndex(74) = 9 'Asc("J")m_bytReverseIndex(75) = 10 'Asc("K") m_bytReverseIndex(76) = 11 'Asc("L") m_bytReverseIndex(77) = 12 'Asc("M") m_bytReverseIndex(78) = 13 'Asc("N") m_bytReverseIndex(79) = 14 'Asc("O") m_bytReverseIndex(80) = 15 'Asc("P") m_bytReverseIndex(81) = 16 'Asc("Q") m_bytReverseIndex(82) = 17 'Asc("R") m_bytReverseIndex(83) = 18 'Asc("S") m_bytReverseIndex(84) = 19 'Asc("T") m_bytReverseIndex(85) = 20 'Asc("U") m_bytReverseIndex(86) = 21 'Asc("V") m_bytReverseIndex(87) = 22 'Asc("W") m_bytReverseIndex(88) = 23 'Asc("X") m_bytReverseIndex(89) = 24 'Asc("Y")m_bytReverseIndex(97) = 26 'Asc("a") m_bytReverseIndex(98) = 27 'Asc("b") m_bytReverseIndex(99) = 28 'Asc("c") m_bytReverseIndex(100) = 29 'Asc("d") m_bytReverseIndex(101) = 30 'Asc("e") m_bytReverseIndex(102) = 31 'Asc("f") m_bytReverseIndex(103) = 32 'Asc("g") m_bytReverseIndex(104) = 33 'Asc("h") m_bytReverseIndex(105) = 34 'Asc("i") m_bytReverseIndex(106) = 35 'Asc("j") m_bytReverseIndex(107) = 36 'Asc("k") m_bytReverseIndex(108) = 37 'Asc("l") m_bytReverseIndex(109) = 38 'Asc("m") m_bytReverseIndex(110) = 39 'Asc("n") m_bytReverseIndex(111) = 40 'Asc("o") m_bytReverseIndex(112) = 41 'Asc("p") m_bytReverseIndex(113) = 42 'Asc("q") m_bytReverseIndex(114) = 43 'Asc("r") m_bytReverseIndex(115) = 44 'Asc("s") m_bytReverseIndex(116) = 45 'Asc("t") m_bytReverseIndex(117) = 46 'Asc("u") m_bytReverseIndex(118) = 47 'Asc("v") m_bytReverseIndex(119) = 48 'Asc("w") m_bytReverseIndex(120) = 49 'Asc("x") m_bytReverseIndex(121) = 50 'Asc("y") m_bytReverseIndex(122) = 51 'Asc("z") m_bytReverseIndex(48) = 52 'Asc("0") m_bytReverseIndex(49) = 53 'Asc("1") m_bytReverseIndex(50) = 54 'Asc("2") m_bytReverseIndex(51) = 55 'Asc("3") m_bytReverseIndex(52) = 56 'Asc("4") m_bytReverseIndex(53) = 57 'Asc("5") m_bytReverseIndex(54) = 58 'Asc("6") m_bytReverseIndex(55) = 59 'Asc("7") m_bytReverseIndex(56) = 60 'Asc("8") m_bytReverseIndex(57) = 61 'Asc("9") m_bytReverseIndex(43) = 62 'Asc("+")End Sub[编辑本段]JS版的Base64编码函数定义var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh ijklmnopqrstuvwxyz0123456789+/";var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);function base64encode(str){var returnVal, i, len;var c1, c2, c3;len = str.length;i = 0;returnVal = "";while(i < len){c1 = str.charCodeAt(i++) & 0xff;if(i == len){returnVal += base64EncodeChars.charAt(c1 >> 2);returnVal += base64EncodeChars.charAt((c1 & 0x3) << 4);returnVal += "==";break;}c2 = str.charCodeAt(i++);if(i == len){returnVal += base64EncodeChars.charAt(c1 >> 2);returnVal += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));returnVal += base64EncodeChars.charAt((c2 & 0xF) << 2);returnVal += "=";break;}c3 = str.charCodeAt(i++);returnVal += base64EncodeChars.charAt(c1 >> 2);returnVal += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));returnVal += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC 0) >>6));returnVal += base64EncodeChars.charAt(c3 & 0x3F);}return returnVal;}function base64decode(str){var c1, c2, c3, c4;var i, len, returnVal;len = str.length;i = 0;returnVal = "";while(i < len){/* c1 */do{c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];} while(i < len && c1 == -1);if(c1 == -1)break;/* c2 */do{c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];} while(i < len && c2 == -1);if(c2 == -1)break;returnVal += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));/* c3 */do{c3 = str.charCodeAt(i++) & 0xff;if(c3 == 61)return returnVal;c3 = base64DecodeChars[c3];} while(i < len && c3 == -1);if(c3 == -1)break;returnVal += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));/* c4 */do{c4 = str.charCodeAt(i++) & 0xff;if(c4 == 61)return returnVal;c4 = base64DecodeChars[c4];} while(i < len && c4 == -1);if(c4 == -1)break;returnVal += String.fromCharCode(((c3 & 0x03) << 6) | c4);}return returnVal;}AS3版的Base64package crypto{import flash.utils.ByteArray;public class Base64 {private static const BASE64_CHARS:String = "ABCDEFGHIJKLMNOPQRS TUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";public static function encode(data:String):String {// Convert string to ByteArrayvar bytes:ByteArray = new ByteArray();bytes.writeUTFBytes(data);// Return encoded ByteArrayreturn encodeByteArray(bytes);}public static function encodeByteArray(data:ByteArray):String {// Initialise outputvar output:String = "";// Create data and output buffersvar dataBuffer:Array;var outputBuffer:Array = new Array(4);// Rewind ByteArraydata.position = 0;// while there are still bytes to be processedwhile (data.bytesAvailable > 0) {// Create new data buffer and populate next 3 bytes from data dataBuffer = new Array();for (var i:uint = 0; i < 3 && data.bytesAvailable > 0; i++) {dataBuffer= data.readUnsignedByte();}// Convert to data buffer Base64 character positions and// store in output bufferoutputBuffer[0] = (dataBuffer[0] & 0xfc) >> 2;outputBuffer[1] = ((dataBuffer[0] & 0x03) << 4) | ((dataBuffer[1]) >> 4); outputBuffer[2] = ((dataBuffer[1] & 0x0f) << 2) | ((dataBuffer[2]) >> 6); outputBuffer[3] = dataBuffer[2] & 0x3f;// If data buffer was short (i.e not 3 characters) then set// end character indexes in data buffer to index of '=' symbol.// This is necessary because Base64 data is always a multiple of// 4 bytes and is basses with '=' symbols.for (var j:uint = dataBuffer.length; j < 3; j++) {outputBuffer[j + 1] = 64;}// Loop through output buffer and add Base64 characters to// encoded data string for each character.for (var k:uint = 0; k < outputBuffer.length; k++) {output += BASE64_CHARS.charAt(outputBuffer[k]);}}// Return encoded datareturn output;}public static function decode(data:String):String {// Decode data to ByteArrayvar bytes:ByteArray = decodeToByteArray(data);// Convert to string and returnreturn bytes.readUTFBytes(bytes.length);}public static function decodeToByteArray(data:String):ByteArray {// Initialise output ByteArray for decoded datavar output:ByteArray = new ByteArray();// Create data and output buffersvar dataBuffer:Array = new Array(4);var outputBuffer:Array = new Array(3);// While there are data bytes left to be processedfor (var i:uint = 0; i < data.length; i += 4) {// Populate data buffer with position of Base64 characters for// next 4 bytes from encoded datafor (var j:uint = 0; j < 4 && i + j < data.length; j++) {dataBuffer[j] = BASE64_CHARS.indexOf(data.charAt(i + j));}// Decode data buffer back into bytesoutputBuffer[0] = (dataBuffer[0] << 2) + ((dataBuffer[1] & 0x30) >> 4);outputBuffer[1] = ((dataBuffer[1] & 0x0f) << 4) + ((dataBuffer[2] & 0x3c) >> 2);outputBuffer[2] = ((dataBuffer[2] & 0x03) << 6) + dataBuffer[3];// Add all non-padded bytes in output buffer to decoded datafor (var k:uint = 0; k < outputBuffer.length; k++) {if (dataBuffer[k+1] == 64) break;output.writeByte(outputBuffer[k]);}}// Rewind decoded data ByteArrayoutput.position = 0;// Return decoded datareturn output;}public function Base64() {throw new Error("Base64 class is static container only");}}}JS实现BASE64加密、解密算法此算法只适用于加密ASCII映射表中的字符组成的字符串,不能处理中文字符串等:脚本如下:<script language=javascript>var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh ijklmnopqrstuvwxyz0123456789+/";var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);function base64encode(str) {var out, i, len;var c1, c2, c3;len = str.length;i = 0;out = "";while(i < len) {c1 = str.charCodeAt(i++) & 0xff;if(i == len){out += base64EncodeChars.charAt(c1 >> 2);out += base64EncodeChars.charAt((c1 & 0x3) << 4);out += "==";break;}c2 = str.charCodeAt(i++);if(i == len){。

相关文档
最新文档