php aes加密解密类(兼容php5php7)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php aes加密解密类(兼容php5php7)相关的知识,希望对你有一定的参考价值。

<?php /** * @desc:php aes加密解密类 * @author [Lee] <[<[email protected]>]> */ class aes{ // 加密方式:1、mcrypt;2、openssl 默认1 private $type; // cast-128 gost rijndael-128 twofish cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes arcfour // AES-128-CBC AES-128-CFB AES-128-CFB1 AES-128-CFB8 AES-128-CTR AES-128-ECB AES-128-OFB AES-128-XTS AES-192-CBC AES-192-CFB AES-192-CFB1 AES-192-CFB8 AES-192-CTR AES-192-ECB AES-192-OFB AES-256-CBC AES-256-CFB AES-256-CFB1 AES-256-CFB8 AES-256-CTR AES-256-ECB AES-256-OFB AES-256-XTS BF-CBC BF-CFB BF-ECB BF-OFB CAMELLIA-128-CBC CAMELLIA-128-CFB CAMELLIA-128-CFB1 CAMELLIA-128-CFB8 CAMELLIA-128-ECB CAMELLIA-128-OFB CAMELLIA-192-CBC CAMELLIA-192-CFB CAMELLIA-192-CFB1 CAMELLIA-192-CFB8 CAMELLIA-192-ECB CAMELLIA-192-OFB CAMELLIA-256-CBC CAMELLIA-256-CFB CAMELLIA-256-CFB1 CAMELLIA-256-CFB8 CAMELLIA-256-ECB CAMELLIA-256-OFB CAST5-CBC CAST5-CFB CAST5-ECB CAST5-OFB DES-CBC DES-CFB DES-CFB1 DES-CFB8 DES-ECB DES-EDE DES-EDE-CBC DES-EDE-CFB DES-EDE-OFB DES-EDE3 DES-EDE3-CBC DES-EDE3-CFB DES-EDE3-CFB1 DES-EDE3-CFB8 DES-EDE3-OFB DES-OFB DESX-CBC GOST 28147-89 IDEA-CBC IDEA-CFB IDEA-ECB IDEA-OFB RC2-40-CBC RC2-64-CBC RC2-CBC RC2-CFB RC2-ECB RC2-OFB RC4 RC4-40 RC4-HMAC-MD5 SEED-CBC SEED-CFB SEED-ECB SEED-OFB aes-128-cbc aes-128-ccm aes-128-cfb aes-128-cfb1 aes-128-cfb8 aes-128-ctr aes-128-ecb aes-128-gcm aes-128-ofb aes-128-xts aes-192-cbc aes-192-ccm aes-192-cfb aes-192-cfb1 aes-192-cfb8 aes-192-ctr aes-192-ecb aes-192-gcm aes-192-ofb aes-256-cbc aes-256-ccm aes-256-cfb aes-256-cfb1 aes-256-cfb8 aes-256-ctr aes-256-ecb aes-256-gcm aes-256-ofb aes-256-xts bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-cfb camellia-128-cfb1 camellia-128-cfb8 camellia-128-ecb camellia-128-ofb camellia-192-cbc camellia-192-cfb camellia-192-cfb1 camellia-192-cfb8 camellia-192-ecb camellia-192-ofb camellia-256-cbc camellia-256-cfb camellia-256-cfb1 camellia-256-cfb8 camellia-256-ecb camellia-256-ofb cast5-cbc cast5-cfb cast5-ecb cast5-ofb des-cbc des-cfb des-cfb1 des-cfb8 des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-cfb1 des-ede3-cfb8 des-ede3-ofb des-ofb desx-cbc gost89 gost89-cnt id-aes128-CCM id-aes128-GCM id-aes128-wrap id-aes192-CCM id-aes192-GCM id-aes192-wrap id-aes256-CCM id-aes256-GCM id-aes256-wrap id-smime-alg-CMS3DESwrap idea-cbc idea-cfb idea-ecb idea-ofb rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 rc4-hmac-md5 seed-cbc seed-cfb seed-ecb seed-ofb private $cipher = ‘seed-ofb‘; // cbc cfb ctr ecb ncfb nofb ofb stream private $mode = ‘stream‘; private $iv; // MCRYPT_RAND MCRYPT_DEV_RANDOM MCRYPT_DEV_URANDOM private $source = MCRYPT_RAND; private $key; private $data; /* 构造函数 @param key 密钥 @param type 加密类型:1、mcrypt;2、openssl */ public function __construct($key,$type = 1){ $this->key = $key; $this->type = $type; } private function getiv(){ $cipher = $this->cipher; $mode = $this->mode; $source = $this->source; $size = mcrypt_get_iv_size($cipher,$mode); $iv = mcrypt_create_iv($size,$source); return $iv; } public function encrypt($data){ $type = $this->type; $cipher = $this->cipher; $mode = $this->mode; $key = $this->key; if($type == 1){ $iv = $this->getiv(); $td = mcrypt_module_open($cipher, "", $mode, ""); mcrypt_generic_init($td, $key, $iv); $encrypted = mcrypt_generic($td, $data); mcrypt_generic_deinit($td); mcrypt_module_close($td); $ret = base64_encode($encrypted); }else{ $encryption_key = base64_decode($key); $len = openssl_cipher_iv_length($cipher); $iv = openssl_random_pseudo_bytes($len); $encrypted = openssl_encrypt($data, $cipher, $encryption_key, 0, $iv); $ret = base64_encode($encrypted . ‘::‘ . $iv); } return $ret; } public function decrypt($data){ $type = $this->type; $cipher = $this->cipher; $mode = $this->mode; $key = $this->key; if($type == 1){ $iv = $this->getiv(); $td = mcrypt_module_open($cipher,"",$mode,""); mcrypt_generic_init($td, $key, $iv); $decode = base64_decode($data); $dencrypted = mdecrypt_generic($td, $decode); mcrypt_generic_deinit($td); mcrypt_module_close($td); $ret = $dencrypted; }else{ $encryption_key = base64_decode($key); $arr = explode(‘::‘, base64_decode($data)); $encrypted_data = $arr[0]; $iv = $arr[1]; $ret = openssl_decrypt($encrypted_data, $cipher, $encryption_key, 0, $iv); } return $ret; } } // $key = ‘abcdefg‘; // $data = ‘你好 world‘; // $aes = new aes($key,2); // $encode = $aes->encrypt($data); // echo $encode.PHP_EOL; // $decode = $aes->decrypt($encode); // echo $decode.PHP_EOL;

以上是关于php aes加密解密类(兼容php5php7)的主要内容,如果未能解决你的问题,请参考以下文章

PHP AES加解密(兼容php5,php7)

AES加解密

PHP笔记-AES加解密(PHP7)

PHP的aes加解密算法

PHP如何实现AES加解密

python Crypto AES-256-ECB 与PHP之间完成加解密