PHP AES-128-CBC 加密解密函数分析
PHP AES-128-CBC 加密解密函数分析
本文将分析一段PHP代码,其中使用AES-128-CBC加密算法对数据进行加密,并解释如何根据给定的加密过程推导出解密函数中$encryptKey和$localIV的值。
加密过程:
'url' => $this->Encrypt($jx_data['url'],$key,'2F131BE91247866E'),
function Encrypt($data,$encryptKey,$localIV):string
{
if (PHP_VERSION >= 7.1) {
return base64_encode(openssl_encrypt($data, 'aes-128-cbc', $encryptKey, OPENSSL_RAW_DATA, $localIV));
} else {
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
mcrypt_generic_init($module, $encryptKey, $localIV);
$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $block - (strlen($data) % $block);
$data .= str_repeat(chr($pad), $pad);
$encrypted = mcrypt_generic($module, $data);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return base64_encode($encrypted);
}
}
解密过程:
function Decrypt($data,$encryptKey,$localIV)
{
if (PHP_VERSION >= 7.1) {
return openssl_decrypt(base64_decode($data), 'aes-128-cbc', $encryptKey, 1, $localIV);
} else {
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
mcrypt_generic_init($module, $encryptKey, $localIV);
$data = mdecrypt_generic($module, base64_decode($data));
$data = str_replace('', '', $data);
return $data;
}
}
解密函数中的$encryptKey和$localIV值:
根据给定的加密过程,解密函数中的$encryptKey和$localIV的值应该分别是:
$encryptKey:'2F131BE91247866E'$localIV:'2890k9nGK6tB959C'
解释:
$encryptKey是加密过程中使用的密钥,它直接在Encrypt函数中使用,因此在解密函数中也应该使用相同的密钥。$localIV是初始化向量,它也是在加密过程中使用的,用于保证每次加密的结果不同,因此在解密函数中也应该使用相同的初始化向量。
总结:
本文分析了PHP中使用AES-128-CBC加密算法进行加密解密的代码,并解释了如何根据给定的加密过程推导出解密函数中$encryptKey和$localIV的值。需要注意的是,加密解密过程中使用相同的密钥和初始化向量才能保证数据的正确解密。
原文地址: http://www.cveoy.top/t/topic/pfo 著作权归作者所有。请勿转载和采集!