PHP:创建一个 iv.不工作


PHP: Create a iv. Not working

我写了一个代码来用mcrypt加密数据。当我创建一个 IV 时它可以工作,但是当我解密它时,解密的文本与以前不同,它给了我这个错误:

Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize

这是我创建 IV 时的代码:

$iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $type), MCRYPT_RAND);

问题还在于它给出了一个带有不可读字符的字符串。

这是我加密时的代码:

trim(base64_encode(mcrypt_encrypt($algo, $pass,
                                  $data, $type, $iv)));

这是用于解密的:

trim(mcrypt_decrypt($algo, $pass,
                    base64_decode($data), $type, $iv));

问题:为什么它不能解密,所以我得到明文,为什么它给我一个错误。

编辑:当我使用 EMPTY IV 时,它可以工作并且我得到明文,但它仍然给我错误:

Warning: mcrypt_xxxxxx(): The IV parameter must be as long as the blocksize 

我写了一个代码来用mcrypt加密数据。

这从来都不是好兆头。(强调我的。

当我创建一个 IV 时它可以工作,但是当我解密它时,解密的文本与以前不同,它给了我这个错误:

Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize

这是我创建 IV 时的代码:

$iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $type), MCRYPT_RAND);

你知道MCRYPT_RAND是什么意思吗?这意味着rand(),一个不安全的随机数生成器。

每个需要初始化向量 (IV) 的算法都具有以下安全要求:

  1. 初始化向量绝不能重复。
  2. 初始化向量必须是不可预测的。

MCRYPT_RAND在两个计数上都失败了:rand()只有 2^32 个可能的输出,它是可预测的。

问题:为什么它不能解密,所以我得到明文,为什么它给我一个错误。

最简单的答案是mcrypt很糟糕,你应该使用其他东西。我的建议在这里。