2016-03-08 32 views
-1

这是我第一次遇到此错误,并且我很困惑如何解决此错误。我将在下面发布我的代码。请在这方面要求其他方面的帮助。任何帮助将不胜感激。消息:mcrypt_encrypt():IV参数必须与块大小一样长

function encryptAes($string, $key) 
{ 
    $string = $this->addPKCS5Padding($string); 
    $crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key); 
    return strtoupper(bin2hex($crypt)); 
} 

UPDATE:行号码777

function _encode_crypt($post = NULL) 
{ 
    return "@".$this->encryptAes($post,$this->encryption_password); 
} 
+0

您是如何生成您所经过的$ key值的? –

回答

0

我会假设你得到的错误是准确的,你实际上是在具有由一个诚实的错误你加密密钥($ key)和初始化矢量(也是$ key)作为相同的值。这是错误的,在很多方面......

相反试试这个:

$iv = mcrypt_create_iv(
    mcrypt_get_iv_size(
     MCRYPT_RIJNDAEL_128, 
     MCRYPT_MODE_CBC 
    ), 
    MCRYPT_DEV_URANDOM 
); 

encryptAes('blah blah', 'some super secret key', $iv); 

function encryptAes($string, $key, $iv) 
{ 
    $string = $this->addPKCS5Padding($string); 
    $crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $iv); 
    return strtoupper(bin2hex($crypt)); 
} 

您需要在一些地方保存这个初始化向量能够解密。

显然,您所传递的$ key值是您使用的加密算法的初始化向量的长度不正确。您正在使用MCRYPT_RIJNDAEL_128,因此iv大小应该是128位(16个字节)。

+0

'分析错误:语法错误,意外'$ iv'(T_VARIABLE),期待函数(T_FUNCTION)'现在得到这个错误。与上面的确切的东西 –

+0

你已经复制了错误的东西,或者错过了部分代码,因为我刚刚测试过它并且工作正常。 –

+0

'消息:sagepay_server :: encryptAes()'path/to/file'在行号777中缺少参数3并定义了'现在,我将发布行号777中的代码,在问题 –

相关问题