【问题标题】:Message: mcrypt_encrypt(): The IV parameter must be as long as the blocksize消息:mcrypt_encrypt():IV 参数必须与块大小一样长
【发布时间】:2016-06-22 07:41:08
【问题描述】:

这是我第一次遇到这个错误,我很困惑如何修复这个错误。我将在下面发布我的代码。请要求任何其他需要帮助的东西。任何帮助将不胜感激。

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

【问题讨论】:

  • 你是如何生成你传递的 $key 值的?

标签: php codeigniter mcrypt


【解决方案1】:

我将假设您得到的错误是准确的,并且您实际上犯了一个诚实的错误,将您的加密密钥 ($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 字节)。

【讨论】:

  • Parse error: syntax error, unexpected '$iv' (T_VARIABLE), expecting function (T_FUNCTION) 现在收到此错误。与上面的确切内容
  • 那是你复制了一些错误的东西,或者因为我刚刚测试它而遗漏了部分代码,它工作正常。
  • Message: Missing argument 3 for sagepay_server::encryptAes() 'path/to/file' in line number 777 and defined 现在,我将在问题中发布第 777 行中的代码
  • 你没有像我上面所说的那样通过 $iv。你注意到我的例子现在说... encryptAes('blah blah', 'some super secret key', $iv);
  • encryptAes('blah blah', 'some super secret key', 'test'); 没有错误但按钮没有出现。
猜你喜欢
  • 2014-07-18
  • 2015-05-12
  • 1970-01-01
  • 2023-03-26
  • 2015-11-06
  • 2011-12-02
  • 2019-03-03
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多