各位大侠,你们好
我想给url参数进行加密,以免明文暴露,形如 http://localhost/prodetail.php?id=1111 将这个1111进行加密就可。
在网上搜索了许久,大多都是说base64_encode(),可以这种加密竟然是 MTExMQ== 这种格式,既怪异又不美观,所以不喜欢。
想要一个能把数字,只加密数字参数就行(长度从1位到6位)加密成整齐的密文方法。如 http://localhost/prodetail.php?id=ca87kr9f 这种形式。

解决方案 »

  1.   

    用的php的Mcrypt Functions自己写个加密函数。
      

  2.   

    我想知道,为什么你觉得MTExMQ==比ca87kr9f 难看呢?
    其实,链接不是给你看的你看了大概是因为你是懂一些传参的机理事实上,WEB的最终用户,绝大部分,鸟都不鸟这个地方~~~~~~~~~~~~~~~~~~~~~~个人经验,多跟客户接触就知道如果到了这里,你还是坚决不喜欢,那就POST吧~~~~~~~~~~~~
      

  3.   

    可以将substr(md5('1111'), 0, 4)存到数据库对应id(1111)数据的字段中,让substr(md5('1111'))代表1111这样
      

  4.   

    本帖最后由 xuzuning 于 2010-06-29 15:23:39 编辑
      

  5.   


    function StrCode($string,$action='ENCODE',$key=''){
    $string.="";
    $action != 'ENCODE' && $string = base64_decode($string);
    $code = '';
    $key  = substr(md5($key),8,18);
    $keylen = strlen($key); $strlen = strlen($string);
    for ($i=0;$i<$strlen;$i++) {
    $k = $i % $keylen;
    $code  .= $string[$i] ^ $key[$k];
    }
    return ($action!='DECODE' ? base64_encode($code) : $code);
    }
    if($_SERVER['QUERY_STRING']){
    $_GET=json_decode(StrCode($_SERVER['QUERY_STRING'],"DECODE"));
    print_r($_GET);
    exit;
    }
    $QUERY['id'] = "1234";
    $QUERY['name'] = "abcd";$url = "?";$url .= StrCode(json_encode($QUERY),"ENCODE");echo "<a href='{$url}'>{$url}</a>";
      

  6.   

    9楼的是uchome的cookie加密函数吧
      

  7.   

    关键就是这一步,其他的没看头..
    $code .= $string[$i] ^ $key[$k];
      

  8.   

    'a'(原字符)  ^  'b' (密钥) == 加密字符
    加密字符     ^  'b' (密钥)  == 'a'(原字符)
      

  9.   


    不是UCHOME的,是PHPWIND里的。是一个带key的base64加解密函数,如果是cookie加密,这个函数就不太好,还要加一些客户端的信息进去更好