php - PHP mcrypt 函数问题

标签 php mcrypt

我使用以下函数来解密我服务器上的数据:

function decrypt($key, $text) {
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}

我已经阅读了很多关于不使用 ECB 的内容(并且知道它已被弃用,所以想切换到 CBC。只需将模式切换为:

function decrypt($key, $text) {
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_CBC, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND)));
}

但是不起作用。没有错误生成,但返回的数据仍然是加密的。

我错过了什么?

更新后的代码 - 仍然有错误:

$key = "hello"; 

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);

function encrypt($key, $text) {
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv)));
}


function decrypt($key, $text) { 
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($text), MCRYPT_MODE_CBC, $iv));
}


$text = 12345;

echo "Plain Number : " . $text . "<br><br>";

$encrypted = encrypt($key, $text);
echo "AES Number : " . $encrypted . "<br><br>";

echo "Plain Number : ". decrypt($key, $encrypted) . "<br><br>";

这应该有效 - 但它返回错误:

block 大小在

blocksize in>警告:mcrypt_encrypt()

[function.mcrypt-encrypt]: The IV parameter must be as long as the blocksize inblocksize in

block 大小在

最佳答案

解密时需要使用与加密时相同的 IV。看起来您在解密过程中生成了一个新的随机 IV。

可以将 IV 附加或添加到密文中。 IV 不是 secret ,但它们对于每条加密消息都应该是唯一的,并且只使用一次。

关于php - PHP mcrypt 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149603/

相关文章:

php - Yii2 使用连接表获取数据

php - 我应该如何将斜线添加到仅单引号并忽略双引号?

php - Smarty 表偶数

php - mcrypt_decrypt 输出的额外字符

python - 使用 PyCrypto 进行 AES 加密,使用 mcrypt 进行解密

php - 如何使用 OpenSSL 解密之前使用 mcrypt 加密的字符串?

php - Nix 可组合派生选项

php - 三个mysql触发器

php - MYSQL 与图像一起使用?

php - 在 PHP 7.3.13 Ubuntu 上安装 mcrypt 时出现问题