例如:http://www.baidu.com/s?wd=%D6%D0%B9%FA%C8%CB其中:%D6%D0%B9%FA%C8%CB 是“中国人” urlencode得到的
现在要实现的算法是如何在url参数当中传递汉字+英文混合参数的时间加密并达到最短的算法。
当然不用urlencode加密也是可以的,关键是如何得到最短的加密参数。
现在要实现的算法是如何在url参数当中传递汉字+英文混合参数的时间加密并达到最短的算法。
当然不用urlencode加密也是可以的,关键是如何得到最短的加密参数。
http://www.xxx.com/index.php?p=中国人abc123 我想把"中国人abc123"加密并达到加密后的参数(长度)要短一些,当然如果没有办法变短,只要能加密也行然后在index.php代码当中解密这个加密的参数然后进行处理。
或者干脆用UID。
a.php
<?php
require_once("en.php");
$keys = "1234567890abcdefghjk@#$%^&*()!"; //密匙
$cr64 = new AzDGCrypt($keys);
$words="中国人abc123";
$en_word = $cr64->crypt($words);
echo "加密变量 = ".$en_word."<br>"; echo '<a href="b.php?action='.$en_word.'">连接</a>';
?>
b.php
<?php
require_once("en.php");
$keys = "1234567890abcdefghjk@#$%^&*()!"; //密匙
$cr64 = new AzDGCrypt($keys);
$de_word = $cr64->decrypt($_REQUEST['action']);
echo "解密原变量 = ".$de_word."<br>";
?>
en.php
<?php
class AzDGCrypt{
var $k;
function AzDGCrypt($m){
$this->k = $m;
}
function ed($t) {
$r = md5($this->k);
$c=0;
$v = "";
for ($i=0;$i<strlen($t);$i++) {
if ($c==strlen($r)) $c=0;
$v.= substr($t,$i,1) ^ substr($r,$c,1);
$c++;
}
return $v;
}
function crypt($t){
srand((double)microtime()*1000000);
$r = md5(rand(0,32000));
$c=0;
$v = "";
for ($i=0;$i<strlen($t);$i++){
if ($c==strlen($r)) $c=0;
$v.= substr($r,$c,1) .
(substr($t,$i,1) ^ substr($r,$c,1));
$c++;
}
return base64_encode($this->ed($v));
}
function decrypt($t) {
$t = $this->ed(base64_decode($t));
$v = "";
for ($i=0;$i<strlen($t);$i++){
$md5 = substr($t,$i,1);
$i++;
$v.= (substr($t,$i,1) ^ $md5);
}
return $v;
}
}
?>