消息:mcrypt_encrypt():IV参数必须与块大小一样长

时间:2016-03-08 11:24:19

标签: php codeigniter mcrypt

这是我第一次遇到此错误,我对如何修复此错误感到非常困惑。我将在下面发布我的代码。请求提供其他任何便利的内容。任何帮助将不胜感激。

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

更新:第777行的代码

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

1 个答案:

答案 0 :(得分: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字节)。