凌的博客

您现在的位置是: 首页 > 学无止境 > PHP > 

PHP

PHP des加密(1

2019-10-07 PHP 1676
// 自定义的DES加解密类
class Des_lib {
    public $key;
    public $iv;
    function __construct($key,$iv='')
    {
        $this->key = $key;
        $this->iv = $iv;
    }
    function encrypt($input) {
        if (version_compare(PHP_VERSION, '7.1', '>='))
        {
            return base64_encode(openssl_encrypt($input, 'des-cbc', $this->key, true,$this->iv));
        }
        else
        {
            $size = mcrypt_get_block_size('des', 'ecb');
            $input = $this->pkcs5_pad($input, $size);
            $key = $this->key;
            $td = mcrypt_module_open('des', '', 'ecb', '');
            $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            $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);
            return preg_replace("/\s*/", '',$data);
        }
    }
    function decrypt($encrypted) {
        if (version_compare(PHP_VERSION, '7.1', '>='))
        {
            return openssl_decrypt(base64_decode($encrypted), 'des-cbc', $this->key, true,$this->iv);
        }
        else
        {
            $encrypted = base64_decode($encrypted);
            $key =$this->key;
            $td = mcrypt_module_open('des','','ecb','');
            //使用MCRYPT_DES算法,cbc模式
            $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            $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);
    }
}


$des = new Des_lib('12345678','98765432');
echo $s = $des->encrypt('99999999');

echo   "\n";

echo $des->decrypt($s);


文章评论

0条评论