2014-06-23 23 views
0

中的块大小一样长通过Google搜索经历了大量加密/解密操作之后,我设法构建了这段代码。但是,它显示以下错误,我无法弄清楚为什么它正在发生。获取此错误 - IV参数必须与

ERROR:警告:mcrypt_encrypt():该IV参数必须是只要在/var/www/encrypt.php块大小上线16

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); 

如果我以下从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); 

它停止显示错误。

我无法确定我做错了什么。

+0

备注:如果您只是密码,'securekey'是一个误称。 Google for PBKDF2。 –

回答

1

您正在将错误的算法名称传递给mcrypt_get_iv_size()。当它应该是MCRYPT_RIJNDAEL_256时,你通过了MCRYPT_CAST_256

CAST-256具有16字节的块大小,而MCRYPT_RIJNDAEL_256指定具有32字节块大小的Rijndael。这将导致错误。

+0

感谢您的回复。你是对的。我使用了错误的算法。其实,我试图建立一个加密/解密库,将用于加密用户的个人数据数据,如.. SSN,DOB和一些财务信息。 你可以给我一些想法,这个CLASS是很好的处理这些信息,或者我应该使用别的东西。 – mi6crazyheart

相关问题