直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中。
php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.
- 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;
- }
- }