base64编码

百度百科                    https://baike.baidu.com/item/base64/8545775?fr=aladdin&fromid=1142965&fromtitle=base64%E7%BC%96%E8%A7%A3%E7%A0%81#4_3


简介:

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作 通配符
为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象 标识符的格式。

规则:

①.把3个字符变成4个字符。
②每76个字符加一个换行符。
③.最后的结束符也要处理


原理:

转码过程例子:3*8=4*6
内存1个字节占8位
转前: s 1 3
先转成ascii:对应 115 49 51
2进制: 01110011 00110001 00110011
6个一组(4组) 011100  110011     000100    110011
然后计算机是8位8位的存数 6不够,自动就补两个高位0了
所有有了 高位补0
科学计算器输入 00011100 00110011 00000100 00110011
得到: 28 51 4 51
查对下照表: c z E z


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

一、在地址的前后分别添加AA和ZZ
二、对新的字符串进行Base64编码
另:  Flashget的与 迅雷类似,只不过在第一步时加的“料”不同罢了,Flashget在地址前后加的“料”是[FLASHGET]
而QQ旋风的干脆不加料,直接就对地址进行Base64编码了


转换表
Table 1: The Base64 Alphabet
索引
对应字符
索引
对应字符
索引
对应字符
索引
对应字符
0
A
17
R
34
i
51
z
1
B
18
S
35
j
52
0
2
C
19
T
36
k
53
1
3
D
20
U
37
l
54
2
4
E
21
V
38
m
55
3
5
F
22
W
39
n
56
4
6
G
23
X
40
o
57
5
7
H
24
Y
41
p
58
6
8
I
25
Z
42
q
59
7
9
J
26
a
43
r
60
8
10
K
27
b
44
s
61
9
11
L
28
c
45
t
62
+
12
M
29
d
46
u
63
/
13
N
30
e
47
v
  
14
O
31
f
48
w
  
15
P
32
g
49
x
  
16
Q
33
h
50
y
  

应用:

除了用于URL,

另有一种用于 正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
其他应用:
Mozilla Thunderbird和Evolution用Base64来保密电子邮件密码
Base64 也会经常用作一个简单的“加密”来保护某些数据,而真正的加密通常都比较繁琐。
垃圾讯息传播者用Base64来避过反垃圾邮件工具,因为那些工具通常都不会翻译Base64的讯息。
在LDIF档案,Base64用作编码字串。

此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。


代码实现:

PHP版

[下列代码仅在GBK中实现,UTF8代码请把 if($button=="迅雷地址->普通地址") echo substr(base64_decode(str_ireplace("thunder://","",$txt1)),2,-2); 这句改为if($button=="迅雷地址->普通地址") echo substr(mb_convert_encoding(base64_decode(str_ireplace("thunder://","",$txt1))),2,-2); 并把charset=gb2312改为charset=utf-8]
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
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
52
<?php
$txt1 =trim( $_POST [ 'text1' ]);
$txt2 =trim( $_POST [ 'text2' ]);
$txt3 =trim( $_POST [ 'text3' ]);
$button = $_POST [ 'button' ];
?>
<!DOCTYPEHTMLPUBLIC "-//W3C//DTDHTML4.0Transitional//EN" >
<html>
<head>
<title>迅雷和FlashGet,QQ旋风地址地址转换工具</title>
<metahttp-equiv= "Content-Type" content= "text/html;charset=gb2312" >
<metacontent= "迅雷,FlashGet,地址转换," name= "keywords" >
</head>
<body>
<formname= "form1" method= "post" action= "" >
<hrsize= "1" >
<h3>迅雷转换</h3>
<P>转换地址:
<inputname= "text1" value= "<?phpecho$txt1;?>" type= "text" style= "width:516px;" /></P>
<P>转换后的:
<inputtype= "text" value="<?php
if ( $button == "普通地址->迅雷地址" ) echo "thunder://" . base64_encode ( "AA" . $txt1 . "ZZ" );
if ( $button == "迅雷地址->普通地址" )echosubstr( base64_decode ( str_ireplace ( "thunder://" , "" , $txt1 )),2,-2);
?> "style=" width:516px;"/></P>
<P>
<inputtype= "submit" name= "button" value= "普通地址->迅雷地址" />
<inputtype= "submit" name= "button" value= "迅雷地址->普通地址" /></P>
<h3>FlashGet转换</h3>
<P>FlashGet地址:
<inputname= "text2" value= "<?phpecho$txt2;?>" type= "text" style= "width:516px;" /></P>
<P>转换后地址:
<inputtype= "text" value="<?php
if ( $button == "普通地址->FlashGet地址" ) echo "flashget://" . base64_encode ( $txt2 );
if ( $button == "FlashGet地址->普通地址" )echostr_ireplace( "[FLASHGET]" , "" , base64_decode ( str_ireplace ( "flashget://" , "" , $txt2 )));
?> "style=" width:516px;"/></P>
<P>
<inputtype= "submit" value= "普通地址->FlashGet地址" name= "button" />
<inputtype= "submit" value= "FlashGet地址->普通地址" name= "button" /></P>
<h3>QQ旋风转换</h3>
<P>QQ旋风地址:
<inputname= "text3" value= "<?phpecho$txt3;?>" type= "text" style= "width:516px;" /></P>
<P>转换后地址:
<inputtype= "text" value="<?php
if ( $button == "普通地址->QQ旋风" ) echo "qqdl://" . base64_encode ( $txt3 );
if ( $button == "QQ旋风->普通地址" )echobase64_decode( str_ireplace ( "qqdl://" , "" , $txt3 ));
?> "style=" width:516px;"/></P>
<P>
<inputtype= "submit" value= "普通地址->QQ旋风" name= "button" />
<inputtype= "submit" value= "QQ旋风->普通地址" name= "button" /></P>
</form>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值