对称加密-利用mcrypt实现加密解密(2)

来源:互联网 发布:mac os x系统官网下载 编辑:程序博客网 时间:2024/06/01 09:03

加密解密类-也是对称加密->AES 模式,和 我之前写的 《利用mcrypt实现加密解密(1)》的区别是:这个生成的秘钥是唯一的,之前的是多个秘钥解密的值是一样的

注意:PHP版本在 7.1.9以上的不赞成使用 mcrypt_module_open 函数

粘贴即用:

<?phpclass CryptAES {            private $hex_iv = 'eIa@yb^vpG4Kovtr';        private $key = 'eIa@yb^vpG4Kovtr';        function __construct() {        //         $this->key = hash('sha256', $this->key, true);    }        function encrypt($str) {                $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');        //         mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));        mcrypt_generic_init($td, $this->key, $this->hex_iv);                $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);                $pad = $block - (strlen($str) % $block);                $str .= str_repeat(chr($pad), $pad);                $encrypted = mcrypt_generic($td, $str);                mcrypt_generic_deinit($td);                mcrypt_module_close($td);                return base64_encode($encrypted);    }        function decrypt($code) {                $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');        //         mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));        mcrypt_generic_init($td, $this->key, $this->hex_iv);                $str = mdecrypt_generic($td, base64_decode($code));                $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);                mcrypt_generic_deinit($td);                mcrypt_module_close($td);                return $this->strippadding($str);    }    /*     For PKCS7 padding     */    private function addpadding($string, $blocksize = 16) {        $len = strlen($string);        $pad = $blocksize - ($len % $blocksize);        $string .= str_repeat(chr($pad), $pad);        return $string;    }        private function strippadding($string) {        $slast = ord(substr($string, -1));        $slastc = chr($slast);        $pcheck = substr($string, -$slast);        if (preg_match("/$slastc{" . $slast . "}/", $string)) {            $string = substr($string, 0, strlen($string) - $slast);            return $string;        } else {            return false;        }    }        function hexToStr($hex) {        $string='';        for ($i=0; $i < strlen($hex)-1; $i+=2)        {            $string .= chr(hexdec($hex[$i].$hex[$i+1]));        }        return $string;    }    }
调用:

$obj = new CryptAES;$userId = 1;$mi = $obj->encrypt($userId);$usernewId = $obj->decrypt($mi);echo $usernewId;
【完结】