mcrypt_encrypt()函数在PHP7.2中不起作用吗?
我有如下加密代码&它在phpversion5.6中工作。但它在PHP 7.2版中不起作用 ** 警告:使用未定义的常量MCRYPT_RIJNDAEL_128-假定 “MCRYPT_RIJNDAEL_128”(这将在未来版本的 (菲律宾) ** 还有其他选择吗mcrypt_encrypt()函数在PHP7.2中不起作用吗?,php,Php,我有如下加密代码&它在phpversion5.6中工作。但它在PHP 7.2版中不起作用 ** 警告:使用未定义的常量MCRYPT_RIJNDAEL_128-假定 “MCRYPT_RIJNDAEL_128”(这将在未来版本的 (菲律宾) ** 还有其他选择吗 $serviceid="2951"; $secretkey = "fQ5FHy0qzM6ljp97"; function pkcs5_pad ($text, $blocksize) { $pad
$serviceid="2951";
$secretkey = "fQ5FHy0qzM6ljp97";
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function encrypt($plaintext, $key) {
$plaintext = pkcs5_pad($plaintext, 16);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_ECB);
$ciphertext_base64 = base64_encode($ciphertext);
$ciphertext_base64;
}
$data = $serviceid;
$auth= encrypt($data ,$secretkey);
加密值为agchnk2xonhhhgyv02xjw==
我在PHP7.2中尝试了以下代码
function encrypt($plaintext, $key)
{
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-128-cbc'));
$encrypted = openssl_encrypt($plaintext, 'aes-128-cbc', $key, 0, $iv);
return base64_encode($encrypted . '::' . $iv);
}
但是输出一直在变化,正如您在PHP 7.2.0中看到的那样,mcrypt_encrypt已从PHP 7.2.0中删除
一个关于最佳选择的问题,我找到了我的问题的解决方案。请在下面查看
function encrypt($plaintext,$key)
{
return base64_encode(openssl_encrypt($plaintext, 'aes-128-ecb', $key, OPENSSL_RAW_DATA));
}
定义“不工作”。您是否收到任何错误、警告或通知?还是意外的结果?总之,快速查看一下应该可以解决问题。@El_Vanja I在问题中添加了警告。警告:未定义常量MCRYPT_RIJNDAEL_128的使用-假定“MCRYPT_RIJNDAEL_128”(这将在PHP的未来版本中引发错误),因为已从PHP7.2.x中删除了“MCRYPT”。由于您的mcrypt加密使用AES(=Rijndael 128)ECB模式,您也应该将其用于OpenSSL(因此省略所有关于“iv”(初始化向量)的代码)。这样可以吗?函数加密($明文,$key){$iv=OpenSSL_随机_伪_字节(OpenSSL_密码_iv_长度('AES-128-cbc');$encrypted=OpenSSL_加密($plaintext,$aes-128-cbc',$key,0,$iv);return base64_encode($encrypted.:'.$iv);}mcrypt_encrypt()函数在PHP7.2中不起作用吗?真正的答案是否定的。