要跟java 作接口交互
对方传过来参数是用 des加密的, php 没有直接des的函数, 网上找了几个好像也不怎么好用,请教高手,有知道的马?

解决方案 »

  1.   

    look here:http://www.cnblogs.com/window07/archive/2009/06/20/1507298.html
      

  2.   


    <?php
    function idtag_des_decode($key,$encrypted)
    {
        $encrypted = base64_decode($encrypted);    $td = mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,''); //使用MCRYPT_DES算法,cbc模式
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        $ks = mcrypt_enc_get_key_size($td);
        mcrypt_generic_init($td, $key, $key);       //初始处理    $decrypted = mdecrypt_generic($td, $encrypted);       //解密    mcrypt_generic_deinit($td);       //结束
        mcrypt_module_close($td);    $y=pkcs5_unpad($decrypted);
        return $y;
    }function idtag_des_encode($key,$text)
    {    $y=pkcs5_pad($text);    $td = mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,''); //使用MCRYPT_DES算法,cbc模式
       /// $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        $ks = mcrypt_enc_get_key_size($td);
        mcrypt_generic_init($td, $key, $key);       //初始处理
        $encrypted = mcrypt_generic($td, $y);       //解密
        mcrypt_generic_deinit($td);       //结束
        mcrypt_module_close($td);    return base64_encode($encrypted);
    }function pkcs5_pad($text,$block=8)
    {
            $pad = $block - (strlen($text) % $block);
            return $text . str_repeat(chr($pad), $pad);
    }
    function pkcs5_unpad($text)
    {
       $pad = ord($text{strlen($text)-1});
       if ($pad > strlen($text)) return $text;
       if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return $text;
       return substr($text, 0, -1 * $pad);
    }$key = 'ABCD1234';
    $str = 'JAVA DES 123';
    $encstr = idtag_des_encode($key,$str);//$tmp = "BJ1g7SNWtIAcmlrdN+Ftaw==";
    $ys=idtag_des_decode($key,$encstr);
    echo $ys;
    ?>
      

  3.   

    有des
    你要安装mcrypt扩展mcrypt_decrypt如果密码长度小于8个字节是DES,如果密码8-16字节,则是3des,不过第一个和第三个密钥相同。
    如果密码长度16-24则三次加密的密钥都不同。如果>24,只取前24。由于密钥都是8字节的,如果你的密钥是10字节,那们是第二种情况,第一个,第三个密钥相同。总长不够16字节,用'\0'.补足。