PHP7.2中AES加密解密方法mcrypt_module_open()替换方案

php7版本运行老的php代码的时候报这个错误: Call to undefined function mcrypt_module_open()

php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.

替代方案如下,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于APP接口token校验中。

[php] view plain copy

class Aes {  
  
    private $hex_iv = '00000000000000000000000000000000'; # converted JAVA byte code in to HEX and placed it here  
  
    private $key = '397e2eb61307109f6e68006ebcb62f98'; #Same as in JAVA  
  
    function __construct($key) {  
        $this->key = $key;  
        $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)); 
 
        $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)); 
 
        $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); 
 
    }*/  
  
    public function encrypt($input)  
    {  
        $data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));  
        $data = base64_encode($data);  
        return $data;  
    }  
  
    public function decrypt($input)  
    {  
        $decrypted = openssl_decrypt(base64_decode($input), 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));  
        return $decrypted;  
    }  
  
    /* 
 
      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;  
    }  
  
}   

你可能感兴趣的:(PHP)