PHP DES加密解密类

今天写App接口的时候需要传递加密数据给APP端,于是就写了下面的DES加密类,亲测正确代码如下

class CryptDes {

    function __construct(){ 

        $this->key = 'codelovers'; //密钥 

        $this->iv = '15548632'; //偏移量 

    } 


    /*

     * 加密

    */ 

    function encrypt($input){ 

        $size = mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); //3DES加密将MCRYPT_DES改为MCRYPT_3DES 

        $input = $this->pkcs5_pad($input, $size); //如果采用PaddingPKCS7,请更换成PaddingPKCS7方法。 

        $key = str_pad($this->key,8,'0'); //3DES加密将8改为24 

        $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_CBC, ''); 

        if( $this->iv == '' ) 

        { 

            $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 

        } 

        else 

        { 

            $iv = $this->iv; 

        } 

        @mcrypt_generic_init($td, $key, $iv); 

        $data = mcrypt_generic($td, $input); 

        mcrypt_generic_deinit($td); 

        mcrypt_module_close($td); 

        $data = base64_encode($data);//如需转换二进制可改成  bin2hex 转换 

        return $data; 

    } 

    /*

    * 解密

    */ 

    function decrypt($encrypted){ 

        $encrypted = base64_decode($encrypted); //如需转换二进制可改成  bin2hex 转换 

        $key = str_pad($this->key,8,'0'); //3DES加密将8改为24 

        $td = mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,'');//3DES加密将MCRYPT_DES改为MCRYPT_3DES 

        if( $this->iv == '' ) 

        { 

            $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 

        } 

        else 

        { 

            $iv = $this->iv; 

        } 

        $ks = mcrypt_enc_get_key_size($td); 

        @mcrypt_generic_init($td, $key, $iv); 

        $decrypted = mdecrypt_generic($td, $encrypted); 

        mcrypt_generic_deinit($td); 

        mcrypt_module_close($td); 

        $y=$this->pkcs5_unpad($decrypted); 

        return $y; 

    } 

    function pkcs5_pad ($text, $blocksize) { 

        $pad = $blocksize - (strlen($text) % $blocksize); 

        return $text . str_repeat(chr($pad), $pad); 

    } 

    function pkcs5_unpad($text){ 

        $pad = ord($text{strlen($text)-1}); 

        if ($pad > strlen($text)) { 

            return false; 

        } 

        if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){ 

            return false; 

        } 

        return substr($text, 0, -1 * $pad); 

    } 

    function PaddingPKCS7($data) { 

        $block_size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);//3DES加密将MCRYPT_DES改为MCRYPT_3DES 

        $padding_char = $block_size - (strlen($data) % $block_size); 

        $data .= str_repeat(chr($padding_char),$padding_char); 

        return $data; 

    } 


具体用法如下:

$str = 'www.codelovers.cn'; $des = new CryptDes();  

$mres = $this->_des->encrypt($str); //加密  

$jres = $this->_des->decrypt($mres);//解密  

原文地址:http://www.codelovers.cn/article/20180625155919.html

你可能感兴趣的:(PHP DES加密解密类)