Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18680154
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-04-15 17:47:10

学习php也有一个多月,虽然自己感觉到进步不少,但是自己也没写过什么值得拿出来绚的东西,写过一个lrc歌词采集入库的函数,不过除了在编码的转换上有点含量之外,其他也没什么。

这几天看了google code search后,一直都在想加密url参数,使之不能被采集,并保护程序的安全,减少被注入的机会。
google url 加密后的形式如

CODE:
show:bKlvupYuyQE:oK3PIFiQYaI:p2kVf7Gz8rE

我想这样的字串任谁看了都不会懂。在加密url参数时,我曾考虑过base64和md5,不过经base64加密后的字串中除了含有+、/、=外,生成的不定长度也是一个问题。而md5是不可逆的,虽然我很喜欢它。

先引用网上关于base64算法的生成过程:
QUOTE:
一、编码规则
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。
例:将对ABC进行BASE64编码
首先取ABC对应的ASCII码值。A(65)B(66)C(67)。
再取二进制值A(01000001)B(01000010)C(01000011),然后把这三个字节的二进制码接起来(010000010100001001000011),再以6位为单位分成4个数据块并在最高位填充两个0后形成4个字节的编码后的值(00010000)(00010100)(00001001)(00000011)。再把这四个字节数据转化成10进制数得(16)(20)(19)(3)。最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D)。这里的值实际就是数据在字符表中的索引。
注BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
二、解码规则
解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。

可以看出base64编码规则其实很简单,我们能不能改良它,使之成为只含有大小写英文字母(a-z,A-Z)和数字(0-9)共计62个字符的编码。答案当然是可以的:

一、定义一个数组$base62 = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"0","1","2","3","4","5","6","7","8","9");
这样保证了生成的字符中只含有(a-z、A-Z、0-9),

二、对输入字符的二进制进行补位、分组处理:没有8位的补齐8位(前面补0),然后每4位进行分组。
例:decbin(ord("b"))=>1100010=>补位=>01100010=>分组=>0110、0010

三、对每次分组后的值返回(其十进制*4+(0-1)),这里的0-1是一个循环。因为4位二进制数返回的十进制数在[0(0000),15(1111)]间,而数组在[0,61]间。为了生成这些数,就须[0,15]*4+[0,1]=[0,61]。
例:0110=>bindec("0110")*4+0=>24,0010=>bindec("0010")*4+1=>9.

四、取数组中相应的字符后连接起来$base62[24]=>W,$base62[9]=>J.连接后就成了"WJ"。

相应的解码也就是一个逆推的过程。

升级版:与自定义的密匙进行异或处理后,很难破解。

高级版:在升级版的基础上配合md5可生成定长的加密串。

我想经过这些后应该可以做很多事了吧^_^
阅读(420) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~