mcrypt_encrypt无法初始化

mix*_*kat 4 php encryption aes mcrypt

我试图使用Cbit模式中的Rijndael密码使用256位密钥加密PHP中的一些数据但由于某种原因我收到以下错误消息:

mcrypt_encrypt()模块初始化失败

我的代码:

    $hashKey = hash('sha256',$key);
    $iv = hash('sha256',$hashKey);

    //                                                 ------Cipher-------------key-------------Data-------------Mode---------IV--
    $encryptedQuestion = base64_encode(mcrypt_encrypt('MCRYPT_RIJNDAEL_256', $hashKey , $_POST['question'], MCRYPT_MODE_CBC, $iv));
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到这个错误吗?

Ja͢*_*͢ck 5

我可以发现代码存在一些问题:

  1. $iv不应该依赖$hashKey; 相反,你应该使用单独创建它mcrypt_create_iv().

  2. $hashKey应该是二元而不是文本.

  3. MCRYPT_RIJNDAEL_256 是常量,不应该作为字符串传递.

以下代码比您的代码更详细,但它应该让您深入了解加密某些内容所需的步骤:

$crypto = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($crypto), MCRYPT_DEV_URANDOM);

$hkey = hash('sha256', $key, true);

mcrypt_generic_init($handle, $hkey, $iv);

$enc_question = mcrypt_generic($handle, $_POST['question']);

mcrypt_generic_deinit($handle);
mcrypt_module_close($handle);
Run Code Online (Sandbox Code Playgroud)

我也遗漏了任何错误检查.