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

直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中。

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

[php]  view plain  copy
  1. class Aes {  
  2.   
  3.     private $hex_iv = '00000000000000000000000000000000'; # converted JAVA byte code in to HEX and placed it here  
  4.   
  5.     private $key = '397e2eb61307109f6e68006ebcb62f98'; #Same as in JAVA  
  6.   
  7.     function __construct($key) {  
  8.         $this->key = $key;  
  9.         $this->key = hash('sha256'$this->key, true);  
  10.     }  
  11.   
  12.     /* 
  13.     function encrypt($str) { 
  14.  
  15.         $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
  16.  
  17.         mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv)); 
  18.  
  19.         $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
  20.  
  21.         $pad = $block - (strlen($str) % $block); 
  22.  
  23.         $str .= str_repeat(chr($pad), $pad); 
  24.  
  25.         $encrypted = mcrypt_generic($td, $str); 
  26.  
  27.         mcrypt_generic_deinit($td); 
  28.  
  29.         mcrypt_module_close($td); 
  30.  
  31.         return base64_encode($encrypted); 
  32.  
  33.     } 
  34.  
  35.     function decrypt($code) { 
  36.  
  37.         $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
  38.  
  39.         mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv)); 
  40.  
  41.         $str = mdecrypt_generic($td, base64_decode($code)); 
  42.  
  43.         $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
  44.  
  45.         mcrypt_generic_deinit($td); 
  46.  
  47.         mcrypt_module_close($td); 
  48.  
  49.         return $this->strippadding($str); 
  50.  
  51.     }*/  
  52.   
  53.     public function encrypt($input)  
  54.     {  
  55.         $data = openssl_encrypt($input'AES-256-CBC'$this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));  
  56.         $data = base64_encode($data);  
  57.         return $data;  
  58.     }  
  59.   
  60.     public function decrypt($input)  
  61.     {  
  62.         $decrypted = openssl_decrypt(base64_decode($input), 'AES-256-CBC'$this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));  
  63.         return $decrypted;  
  64.     }  
  65.   
  66.     /* 
  67.  
  68.       For PKCS7 padding 
  69.  
  70.      */  
  71.   
  72.     private function addpadding($string$blocksize = 16) {  
  73.   
  74.         $len = strlen($string);  
  75.   
  76.         $pad = $blocksize - ($len % $blocksize);  
  77.   
  78.         $string .= str_repeat(chr($pad), $pad);  
  79.   
  80.         return $string;  
  81.   
  82.     }  
  83.   
  84.     private function strippadding($string) {  
  85.   
  86.         $slast = ord(substr($string, -1));  
  87.   
  88.         $slastc = chr($slast);  
  89.   
  90.         $pcheck = substr($string, -$slast);  
  91.   
  92.         if (preg_match("/$slastc{" . $slast . "}/"$string)) {  
  93.   
  94.             $string = substr($string, 0, strlen($string) - $slast);  
  95.   
  96.             return $string;  
  97.   
  98.         } else {  
  99.   
  100.             return false;  
  101.   
  102.         }  
  103.   
  104.     }  
  105.   
  106.     function hexToStr($hex)  
  107.     {  
  108.   
  109.         $string='';  
  110.   
  111.         for ($i=0; $i < strlen($hex)-1; $i+=2)  
  112.   
  113.         {  
  114.   
  115.             $string .= chr(hexdec($hex[$i].$hex[$i+1]));  
  116.   
  117.         }  
  118.   
  119.         return $string;  
  120.     }  
  121.   
  122. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值