1. 程式人生 > >aes/cbc/pkcs5padding/128加解密

aes/cbc/pkcs5padding/128加解密

    //******aes/cbc/pkcs5padding/128加解密******
    private function aesEncrypt($data,$iv=''){
        $enc_key = 'KlW';//隨機生成16為由大小寫字元和數字組成的字串
        $enc_iv = self::aesRandom(16,'1234567890abcdefghijklmnopqrstuvwxyz');//隨機生成16位iv
        if($iv){
            $enc_iv=$iv;
        }
        $method = MCRYPT_RIJNDAEL_128;
        $mode
= MCRYPT_MODE_CBC; //優化 $block = mcrypt_get_block_size($method, $mode); $pad = $block - (strlen($data)%$block); $pad = $data.str_repeat(chr($pad), $pad); $td = mcrypt_module_open($method, '', $mode, ''); mcrypt_generic_init($td , $enc_key , $enc_iv); $encrypt
= mcrypt_generic($td, $pad); mcrypt_generic_deinit($td); mcrypt_module_close($td); return base64_encode($enc_iv.$encrypt);//iv拼密串之後base64 } private function aesDecrypt($data){ $dec_key = 'lW';//隨機生成16為由大小寫字元和數字組成的字串 $data = base64_decode($data) ;//base64 $dec_iv
= substr($data, 0, 16);//前16位為iv if(strlen($dec_iv)<16){ return false; } $data = substr($data,16); //16位後未密串 $method = MCRYPT_RIJNDAEL_128; $mode = MCRYPT_MODE_CBC; $td = mcrypt_module_open($method, '', $mode, ''); mcrypt_generic_init($td , $dec_key , $dec_iv); $decrypt = mdecrypt_generic($td, $data); mcrypt_generic_deinit($td); mcrypt_module_close($td); //Remove the padding $pad = ord($decrypt[($len = strlen($decrypt))-1]); //優化 $beforePad = strlen($decrypt) - $pad; $decrypt = substr($decrypt, $beforePad) == str_repeat(substr($decrypt, -1), $pad) ? substr($decrypt, 0, $len - $pad) : $decrypt; return $decrypt; } private function aesRandom($length, $chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789') { $hash = ''; $max = strlen($chars) - 1; for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } private function checkOpenid($openid){ if(!$openid){ $json = json_encode(array('success'=>false,'msg'=>'引數非法')); return $json; } // $openid = str_replace(' ', '+', urldecode($openid)); return $this->aesDecrypt(urldecode($openid)); }