【发布时间】:2013-01-20 19:42:59
【问题描述】:
我正在使用两个简单的函数来加密和解密密码。但是解密功能无法正常工作。这是我的输出:
加密:�\� ���#�%\��>�3,�o�Sd��c�
解密:test123
这是我的代码:
$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
function encrypt($data)
{
$key = 'test';
$encrypted_data = mcrypt_cbc(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_ENCRYPT, $iv);
return $encrypted_data;
}
function decrypt($encryptedData)
{
$key = 'test';
$decrypt = mcrypt_cbc(MCRYPT_RIJNDAEL_256, $key, $encryptedData, MCRYPT_DECRYPT, $iv);
return $decrypt;
}
$password = encrypt($member[0]['PASSWORD']);
print('Encrypted: '.$password.'<br />');
$password = decrypt($password);
print('Decrypted: '.$password);
【问题讨论】:
-
考虑改用this code。这绝对有效。
-
这里有几个错误;您将字符串或密码视为密钥,您使用的是 Rijndael 256,它 not 与 AES-256 相同,最后您没有明确定义明文的字符编码。这显然不包括我的回答中的 IV 问题。
-
不幸的是,您不得不欺骗 mcrypt 执行 AES-256。就像让你的密码
MCRYPT_RIJNDAEL_128一样,但是给它一个 256 位的密钥。 PHP中的字符编码也不容易控制,我不认为。不过在密码这件事上完全正确。
标签: php encryption mcrypt