aes/cbc/pkcs5padding/128加解密
阿新 • • 發佈:2018-12-01
//******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));
}