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)
任何人都可以看到这个错误吗?
我可以发现代码存在一些问题:
你$iv
不应该依赖$hashKey
; 相反,你应该使用单独创建它mcrypt_create_iv()
.
你$hashKey
应该是二元而不是文本.
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)
我也遗漏了任何错误检查.