Encryption 如何将Mcrypt迁移到openssl函数以使用PHP7.3进行加密

Encryption 如何将Mcrypt迁移到openssl函数以使用PHP7.3进行加密,encryption,openssl,mcrypt,php-7.3,Encryption,Openssl,Mcrypt,Php 7.3,不幸的是,7.3不支持mcrypt,我必须重构一些代码。 我无法迁移此加密函数: mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, pkcs5_pad(trim($strToEncode), mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB)), MCRYPT_MODE_ECB, $iv); 我尝试了以下代码: function pkcs5_pad ($text, $blocksize) {

不幸的是,7.3不支持mcrypt,我必须重构一些代码。 我无法迁移此加密函数:

mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, pkcs5_pad(trim($strToEncode), mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB)), MCRYPT_MODE_ECB, $iv);
我尝试了以下代码:

function pkcs5_pad ($text, $blocksize) 
{ 
   $pad = $blocksize - (strlen($text) % $blocksize); 
   return $text . str_repeat(chr($pad), $pad); 
} 

$cipher = "aes-128-gcm";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));
$block_size = strlen(openssl_encrypt('', $cipher, '', OPENSSL_RAW_DATA, $iv));
$ciphertext = openssl_encrypt(pkcs5_pad(trim($strToEncode),$block_size), $cipher, $key, $options=0, $iv);

但它不起作用,我在pkcs5_pad函数中得到:Uncaught division by zero error这是工作代码:

$cipher = "aes-128-ecb";
$ciphertext = openssl_encrypt(trim($strToEncode), $cipher, $key, OPENSSL_RAW_DATA);

主要原因是显而易见的!MCrypt使用ECB模式,但您尝试在新代码中使用AES-128-GCM。此外,AES-128-GCM在内部使用CTR模式,不需要任何填充。此外,ECB模式不使用IV,但这种情况发生在mcrypt_encrypt-call中,因此即使mcrypt_encrypt-call也不一致。对不起,伙计们,对我来说不明显,我不知道加密的区别。我需要重构一个脚本的这一小部分,它不再适用于php7.3,而mcrypt似乎已被弃用。我应该在openssl中使用哪种密码来替换MCRYPT_RIJNDAEL_128?除了算法之外,还必须定义操作模式。在
mcrypt_encrypt
中,AES-128(
mcrypt_RIJNDAEL_128
)定义为ECB模式(
mcrypt_mode_ECB
)。在
openssl\u encrypt
中,这两个参数都在单个参数中指定,这将是
aes-128-ecb
。然而,应该注意的是,欧洲央行模式是不安全的。此外,ECB模式不使用IV,即,
mcrypt_encrypt
中的IV被忽略。好的,谢谢,我用
$cipher=“aes-128-ECB”解决了这个问题$ciphertext=openssl\u加密(trim($strToEncode),$cipher,$key,openssl\u原始数据)