php aes加密解密类(兼容php5、php7)
admin
2023-06-12 19:22:23
0次
]>
 */
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;

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...