paip.URL参数压缩64进制
有时候URL参数经过编码是16进制的,这样会比较长,可以使用64进制来压缩一下。。约可以减少30%。。。
比如admin,这个字串,经过加密后是D7D5E2DACF,增长了一倍。。我们可以用64进制来来压缩一下,得到的结果是19Xi2sP
主要过程是:
1.把此字串每三个分为一组,
2.然后每组转为64进制。。再连接起来就行了。
3.转码对照串来自于BASE64,不过考虑到URL传输的实际情况把最后两们+/变成了@$,这样就可以不用URL ENCODE就可以直接http传输。。
这里主要由ASP页面发起请求,PHP回应,所以编码是VBS写的,而解码是PHP写的..
------16进制转64过程(vbs)------
const BASE_64_MAP_INIT_L718 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@$"
''16进制转64进制
PUBLIC FUNCTION HEX64Encode(plain)
dim msgarr,newstr
msgarr=str2array_l718(plain,3)
for i=0 to ubound(msgarr)
dim numHex
numHex=msgarr(i)
dim newchar 'HEx64 format
newchar= tohex64(numHex)
newstr=newstr+cstr(newchar)
next
HEX64Encode = newstr
END FUNCTION
-----------------解码过程----------------
// ' 64进制转16进制
function HEX64Decode($num)
{
$msgarr=str_split($num,2);
$newstr="";
for($i=0;$i< count ($msgarr);$i++){
$v=$msgarr[$i];
$keychar=hex64Tohex($v);// 'encode char
$newstr=$newstr.$keychar;
}
return $newstr;
}
$BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@$";
//单个数 ONLY
function hex64Tohex($num) { // Xi
global $BASE_64_MAP_INIT;
$BASE_64_MAP_INIT_arr = str_split ( $BASE_64_MAP_INIT );
$numarr = str_split ( $num );
$numDec=0;
if (count ( $numarr ) == 1) {
$first = $numarr [0];
$firstIndex = strpos ( $BASE_64_MAP_INIT, $first );
$numDec = $firstIndex;
} else {
$first = $numarr [0];
$sencond = $numarr [1];
$firstIndex = strpos ( $BASE_64_MAP_INIT, $first );
$sencondIndex = strpos ( $BASE_64_MAP_INIT, $sencond );
$firstNum = $firstIndex * 64;
$numDec = $firstNum + $sencondIndex;
}
$numHex = dechex ( $numDec );
return $numHex;
}