【发布时间】:2014-06-23 21:52:18
【问题描述】:
在谷歌上搜索了很多加密/解密内容后,我设法构建了这段代码。但是,它显示以下错误,我无法弄清楚它为什么会发生。
错误:警告:mcrypt_encrypt():IV 参数必须与第 16 行 /var/www/encrypt.php 中的块大小一样长
error_reporting(E_ALL ^ E_DEPRECATED);
ini_set('display_errors', '1');
class Cipher {
private $securekey, $iv;
function __construct($textkey) {
$this->securekey = hash('sha256',$textkey,TRUE);
//$this->iv = mcrypt_create_iv(32);
$size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB);
$this->iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
}
function encrypt($input) {
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->securekey, $input, MCRYPT_MODE_CFB, $this->iv));
}
function decrypt($input) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->securekey, base64_decode($input), MCRYPT_MODE_CFB, $this->iv));
}
}
$cipher = new Cipher('secret passphrase');
$encryptedtext = $cipher->encrypt("hide me");
echo "->encrypt = $encryptedtext<br />";
$decryptedtext = $cipher->decrypt($encryptedtext);
echo "->decrypt = $decryptedtext<br />";
var_dump($cipher);
如果我在 CONSTRUCTOR 函数的 2 行之后发表评论..
$size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB);
$this->iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
& 取消注释这一行..
$this->iv = mcrypt_create_iv(32);
它停止显示错误。
我无法确定我做错了什么。
【问题讨论】:
-
旁注:如果您只是对密码进行哈希处理,
securekey是用词不当。 Google for PBKDF2。
标签: php encryption