兼容php5和php7 openssl_encrypt AES-128-CBC

匿名 (未验证) 提交于 2019-12-02 22:11:45

直接上个类吧

 <?php /**  * Created by PhpStorm.  * User: Administrator  * Date: 2019/7/25  * Time: 17:53  */ /**  * @desc:php aes加密解密类  * @author [Lee] <[<complet@163.com>]>  */ 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 = 'AES-128-ECB'; //?iv     private $cipher = 'AES-128-CBC';     // cbc  cfb  ctr  ecb  ncfb  nofb  ofb  stream     private $mode = 'stream';     private $iv = '2398DHY433UGFKL1X';     // 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 = 2){         // 关闭所有PHP错误报告         error_reporting(0);         $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);             //生成一串伪随机字节,其中字节数由length参数确定。 //            $iv = openssl_random_pseudo_bytes($len);             $iv = $this->iv;             $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];             var_dump($encrypted_data, $cipher, $encryption_key, 0, $iv);             $ret = openssl_decrypt($encrypted_data, $cipher, $encryption_key, 0, $iv);             var_dump($ret);         }         return $ret;     } }  $key = 'FW2VN#N8DAL147L*';  $data = '{"messageid":15640501253114,"timestamp":1564050125,"deviceid":"C192101101","cmd":"CMD-01","desired":{"allget":1}}';  $aes = new aes($key,2);  $encode = $aes->encrypt($data);  echo $encode.PHP_EOL; //$encode = 'Z1ZaeVZwaEd6dXNwMjgxSXF0MzcyeWN4aHd4dUhMRmR6RVA0bDlnblhrMWI1NmtuRG1PdW5CeWdsb01qOGZsVTNWbEdZdzBFQnltT0lwU3dVR0p5enhwNmRHS0p3enBZZkNTMElvbk4vYk5OdGF5M3VxSFc5NW1scG1HY3lqUVI4RklUODc1eWQvdlpBOTMxY2F1WjdrQzg2VEprVzdWMGI2UjlQY0FuVnlFPTo6MjM5OERIWTQzM1VHRktMMVg=';  $decode = $aes->decrypt($encode);  echo $decode.PHP_EOL;

文章来源: https://blog.csdn.net/qq_27229113/article/details/97375513
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!