上次那个MD5还没解决 你这个更困难,希望php高手出现
先补个MD5的给你参考
http://expert.csdn.net/Expert/topic/2726/2726723.xml?temp=.246319

解决方案 »

  1.   

    这种事情要靠自己的朋友~~
    因为写这个高难度的代码最快也要1-2天,你想你会愿意吗?谁又有那么多空闲时间呢?
    我当初用java写MD5的时候用了4天时间就这个算法.别人只能帮你提个思路(已经很不错了),最终还是看自己
    楼主不要生气,我这人爱管闲事,所以闲话多,你就当听听而已..
      

  2.   

    我要 严重谢谢中!![email protected]
      

  3.   

    我也要,感谢!!
    [email protected]
      

  4.   

    能给我吗?
    [email protected]
      

  5.   

    to yiciko 谁要?发到这里不就好了!大家都学习一下!
      

  6.   

    <?php
    /*test.php*/
    include_once ("encoding.inc.php");                   //编码文件
    $SPKey          = "1234";  
    $SPCode         = "1234";                                                          
    $ReturnURL      = "http://www.sohu.com";          
    $TimeStamp      = "20031225145051.906";   #SPTicketRequestValue的算法
    $Seed   = $ReturnURL."$".$TimeStamp;
    $Digest = base64_encode(hex2bin(md5($SPCode."$".$Seed."$".$SPKey)));   //right                 
    $input_string = $Seed."$".$Digest;$CharEncoding=new Encoding(); 
    $CharEncoding->SetGetEncoding("GBK")||die("编码名错误"); 
    $CharEncoding->SetToEncoding("UTF-16LE")||die("编码名错误"); 
    $content_utf = $CharEncoding->EncodeString($input_string); 
    $ret = EPushEncode($content_utf,$SPKey);$SPTicketRequestValue = urlencode($SPCode."$".$ret);echo $SPTicketRequestValue;
    //正确的结果:1234%24RxHUmgE85jmh9axMOIBLdoppelwmo%2FWOtcoMUAsQPLd7BS%2BNJOJ5TwiY7%2F768%2Bix%2FUEfBtBTL5OR%2FDgb7PrwGl5o%2FLZUCnSN901%2Fdk7KrwysgWncKPimBGkNG5O%2BUgAS8TTnYMTfHzT4PdthXr2Jl%2Br2kCmxKRxxJbFBsXtJu0w%3D/**
    +--------------------------------------------------
    |   函数名:hex2bin($data)
    |   作用:hash算法 key=hash(SPKey)(hash算法采用MD5,出来的结果是16字节)
    |   参数:
    | @param: $data:要md5的值。
    |   返回值:md5后的值。
    +--------------------------------------------------
    */
    function hex2bin($data) {
    $len = strlen($data);
    for($i=0;$i<$len;$i+=2) {
    $newdata .= pack("C",hexdec(substr($data,$i,2)));
    }
    return $newdata;
    }/**
    +--------------------------------------------------
    |   函数名:EPushEncode($content, $SPKey)
    |   作用:加密算法 Base64(Encrypt(Seed+"$"+Digest))(加密算法采用3 DES,hash算法采用MD5,出来的结果是16字节,后面补8个字节的
    |        0,一共24个字节,作为3 DES的密钥).
    |   参数: 
    | @param: $content:要加密的值(相当于Seed+"$"+Digest)
    |           $SPKey:作为3DES的密钥。
    |   返回值:加密后的值。
    +--------------------------------------------------
    */
    function EPushEncode($content, $SPKey) {

        /* 192bit key*/
        $keybyte = hex2bin(md5($SPKey)."0000000000000000");    //$contentbyte = Unicode($content);
        /* Open the cipher */
        $td = mcrypt_module_open (MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
        
        /* initialize cipher */
        $blocksize = mcrypt_enc_get_block_size($td);
        $keysize = mcrypt_enc_get_key_size($td);
        
        /* Create the IV and determine the keysize length */
        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
        
        /* pad the cleartext */
        // PKCS7补齐
        $padsize = $blocksize - (strlen($content) % $blocksize);
        $content .= str_repeat(pack ('C*', $padsize), $padsize);
        
        /* do the encryption */
        mcrypt_generic_init ($td, $keybyte, $iv);
        $crypt = mcrypt_generic ($td,$content);
        
        $result = base64_encode($crypt);    return $result;
    }?>
      

  7.   

    <?
    /*** encoding.inc.php
    From: http://www.phpe.net/class/95.shtml
    例子: 
    将gbk编码的字符串转化为UTF-8编码: $s="GBK编码"; 
    $CharEncoding=new Encoding(); 
    $CharEncoding->SetGetEncoding("GBK")||die("编码名错误"); 
    $CharEncoding->SetToEncoding("UTF-8")||die("编码名错误"); 
    echo $CharEncoding->EncodeString($s); 
    ***/
    class Encoding
    {
        var $GetEncoding="1";
        var $ToEncoding="3";
    var $UnicodeString="";
    var $Encodings=array("1"=>"GBK","2"=>"UTF-8","3"=>"UTF-16BE","4"=>"UTF-16LE","5"=>"BIG5");
    var $FilePath="./encoding/"; // pay attention to here!!!
    function SetGetEncoding($GetEncoding)
    {
    $order=0;
    if ($this->CheckEncoding($GetEncoding,$order)) {
        $this->GetEncoding=$order;
    return true;
    }
    echo "警告:您设置了程序不支持的编码类型,编码格式将不做变动";
    return false;
    }
    function SetToEncoding($ToEncoding)
    {
    $order=0;
    if ($this->CheckEncoding($ToEncoding,$order)) {
        $this->ToEncoding=$order;
    return true;
    }
    echo "警告:您设置了程序不支持的编码类型,编码格式将不做变动";
    return false;
    }
    function EncodeString($String)
    {
        if ($this->GetEncoding=="1") {
            $this->UnicodeString=$this->GBKToUnicode($String);
        }
    elseif ($this->GetEncoding=="2") {
        $this->UnicodeString=$this->UTFToUnicode($String);
    }
    elseif ($this->GetEncoding=="3") {
        $this->UnicodeString=$String;
    }
    elseif ($this->GetEncoding=="4") {
        $this->UnicodeString=$this->ChangeByte($String);
    }
    elseif ($this->GetEncoding=="5") {
        $this->UnicodeString=$this->BIGToUnicode($String);
    }
    if ($this->ToEncoding=="1") {
            return $this->UnicodeToGBK($this->UnicodeString);
        }
    elseif ($this->ToEncoding=="2") {
        return $this->UnicodeToUTF($this->UnicodeString);
    }
    elseif ($this->ToEncoding=="3") {
        return $this->UnicodeString;
    }
    elseif ($this->ToEncoding=="4") {
        return $this->ChangeByte($this->UnicodeString);
    }
    elseif ($this->ToEncoding=="5") {
        return $this->UnicodeToBIG($this->UnicodeString);
    }
    }
    function GBKToUnicode(&$String)
    {
        $UnicodeData=file($this->FilePath."gbkunicode.data");
    $ReturnString="";
    $StringLength=strlen($String);
    $p="";
    $q="";
    for($i=0;$i<$StringLength;$i++){
    if(($p=ord(substr($String,$i,1)))>128){
    $q=ord(substr($String,++$i,1));
    if ($p>254) {
        $ReturnString.="003f";
    }
    elseif ($q<64||$q>254) {
        $ReturnString.="003f";
    }
    else {
    $q=($q-64)*4;
    $ReturnString.=substr($UnicodeData[$p-128],$q,4);
    }
    }
    else {
    if ($p==128) {
        $ReturnString.="20ac";
    }
    else {
    $ReturnString.="00";
    $ReturnString.=dechex($p);
    }
    }
    }
    return $this->hex2bin($ReturnString);
    }
    function BIGToUnicode(&$String)
    {
        $UnicodeData=file($this->FilePath."bigunicode.data");
    $ReturnString="";
    $StringLength=strlen($String);
    $p="";
    $q="";
    for($i=0;$i<$StringLength;$i++){
    if(($p=ord(substr($String,$i,1)))>128){
    $q=ord(substr($String,++$i,1));
    if ($p>249) {
        $ReturnString.="003f";
    }
    elseif ($q<64||$q>254) {
        $ReturnString.="003f";
    }
    else {
    $q=($q-64)*4;
    $ReturnString.=substr($UnicodeData[$p-160],$q,4);
    }
    }
    else {
    $ReturnString.="00";
    $ReturnString.=dechex($p);
    }
    }
    return $this->hex2bin($ReturnString);
    }
    function UnicodeToGBK(&$String)
    {
        $GBKData=file($this->FilePath."unicodegbk.data");
    $ReturnString="";
    $StringLength=strlen($String);
    $p="";
    $q="";
    $temp="";
    for($i=0;$i<$StringLength;$i++){
    $p=ord(substr($String,$i++,1));
    if ($i==$StringLength) {
        $temp=dechex($p);
    if (strlen($temp)<2) {
        $temp="0".$temp;
    }
    $ReturnString.=$temp;
    continue;
    }
    $q=ord(substr($String,$i,1));
    if ($p==0&&$q<127) {
        $temp=dechex($q);
    if (strlen($temp)<2) {
        $temp="0".$temp;
    }
    $ReturnString.=$temp;
    continue;
    }
    $p++;
    $begin=hexdec(substr($GBKData[$p],0,2));
    if (strlen($GBKData[$p])<3||$q<$begin||$q>hexdec(substr($GBKData[$p],2,2))) {
        $ReturnString.="3f";
    continue;
    }
    $q*=4;
    $q-=$begin*4;
    $temp=substr($GBKData[$p],$q+4,2);
    if ($temp=="00") {
        $ReturnString.=substr($GBKData[$p],$q+6,2);
    }
    else {
        $ReturnString.=$temp.substr($GBKData[$p],$q+6,2);
    }
    }
    return $this->hex2bin($ReturnString);
    }
    function UnicodeToBIG(&$String)
    {
        $BIGData=file($this->FilePath."unicodebig.data");
    $ReturnString="";
    $StringLength=strlen($String);
    $p="";
    $q="";
    $temp="";
    for($i=0;$i<$StringLength;$i++){
    $p=ord(substr($String,$i++,1));
    if ($i==$StringLength) {
        $temp=dechex($p);
    if (strlen($temp)<2) {
        $temp="0".$temp;
    }
    $ReturnString.=$temp;
    continue;
    }
    $q=ord(substr($String,$i,1));
    if ($p==0&&$q<127) {
        $temp=dechex($q);
    if (strlen($temp)<2) {
        $temp="0".$temp;
    }
    $ReturnString.=$temp;
    continue;
    }
    $p++;
    $begin=hexdec(substr($BIGData[$p],0,2));
    if (strlen($BIGData[$p])<3||$q<$begin||$q>hexdec(substr($BIGData[$p],2,2))) {
        $ReturnString.="3f";
    continue;
    }
    $q*=4;
    $q-=$begin*4;
    $temp=substr($BIGData[$p],$q+4,2);
    if ($temp=="00") {
        $ReturnString.=substr($BIGData[$p],$q+6,2);
    }
    else {
        $ReturnString.=$temp.substr($BIGData[$p],$q+6,2);
    }
    }
    return $this->hex2bin($ReturnString);
    }
      

  8.   

    function UnicodeToUTF(&$String)
    {
    $len=strlen($String);
    $ReturnString="";
    for ($x=0;$x<$len;$x++) {
        $Char=substr($String,$x++,1);
    if ($x==$len) {
        $ReturnString.=bin2hex($Char);
    continue;
    }
    $Char.=substr($String,$x,1);
    $hex=bin2hex($Char);
    $dec=hexdec($hex);
    $bin=decbin($dec);
    $temp="";
    if($dec>0x7f){
    $binlen=strlen($bin);
    for ($i=0;$i<16-$binlen;$i++) {
        $bin="0".$bin;
    }
    $temp.="1110".substr($bin,0,4);
    $temp.="10".substr($bin,4,6);
    $temp.="10".substr($bin,10,6);
    $temp=dechex(bindec($temp));
    }
    else {
    $temp=substr($hex,2,2);
    }
    $ReturnString.=$temp;
    }
    return $this->hex2bin($ReturnString);
    }
    function ChangeByte(&$String)
    {
        $len=strlen($String);
    $ReturnString="";
    for ($i=0;$i<$len;$i++) {
    if ($i+1!=$len) {
        $ReturnString.=substr($String,$i+1,1).substr($String,$i++,1);
    }
    else {
        $ReturnString.=substr($String,$i,1);
    }
    }
    return $ReturnString;
    }
    function UTFToUnicode(&$String)
    {
        $UTFlen=strlen($String);
    $x="";
    $y="";
    $z="";
    $ReturnString="";
    for ($i=0;$i<$UTFlen;$i++) {
        if(($x=ord(substr($String,$i,1)))>128){
    if ($i+1==$UTFlen) {
        $ReturnString.=dechex($x);
    continue;
    }
    $y=ord(substr($String,++$i,1));
    if ($i+1==$UTFlen) {
        $ReturnString.=dechex($x).dechex($y);
    continue;
    }
    $x=decbin($x);
    $y=decbin($y);
    $z=decbin(ord(substr($String,++$i,1)));
    $temp=dechex(bindec(substr($x,4,4).substr($y,2,4).substr($y,6,2).substr($z,2,6)));
    $len=strlen($temp);
    for ($j=0;$j<4-$len;$j++) {
        $temp="0".$temp;
    }
    $ReturnString.=$temp;
    }
    else {
    $ReturnString.="00";
        $ReturnString.=dechex($x);
    }
    }
    return $this->hex2bin($ReturnString);
    }
    function hex2bin(&$String)
    {
    $ReturnString="";
        $len=strlen($String);
    for($i=0;$i<$len;$i+=2) {
    $ReturnString.= pack("C",hexdec(substr($String,$i,2)));
    }
    return $ReturnString;
    }
    function CheckEncoding($Encoding,&$order)
    {
    $order=0;
    reset($this->Encodings);
        while (list($key,$value)=each($this->Encodings)) {
            if ($Encoding==$value) {
    $order=$key;
                return true;
            }
        }
    return false;
    }
    }
    /*
    $s="GBK编码"; 
    $CharEncoding=new Encoding(); 
    $CharEncoding->SetGetEncoding("GBK")||die("编码名错误"); 
    $CharEncoding->SetToEncoding("UTF-8")||die("编码名错误"); 
    echo $CharEncoding->EncodeString($s); 
    */
    ?>
      

  9.   

    请教yicikou(伊静) ( ) 调用 EPushEncode($content, $SPKey)函数/* php安装encrypt模块 */这个模块是在哪里下在得吗?能告诉一下怎么安装吗?
      

  10.   

    extension=php_mcrypt.dll
    extension=php_mhash.dll我把php.ini的这两个打开了,但还是没有反应,还需要设置什么吗?
      

  11.   

    LIII. Mcrypt Encryption Functions
    介绍
    This is an interface to the mcrypt library, which supports a wide variety of block algorithms such as DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB cipher modes. Additionally, it supports RC6 and IDEA which are considered "non-free". 需求
    These functions work using mcrypt. To use it, download libmcrypt-x.x.tar.gz from here and follow the included installation instructions. Windows users will find all the needed compiled mcrypt binaries here. If you linked against libmcrypt 2.4.x or higher, the following additional block algorithms are supported: CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT and the following stream ciphers: ENIGMA (crypt), PANAMA, RC4 and WAKE. With libmcrypt 2.4.x or higher another cipher mode is also available; nOFB. 安装
    You need to compile PHP with the --with-mcrypt[=DIR] parameter to enable this extension. DIR is the mcrypt install directory. Make sure you compile libmcrypt with the option --disable-posix-threads.