首页 文章

PHP和mcrypt_decrypt():关于“初始化向量大小”的警告

提问于
浏览
0

为什么我收到此警告消息“警告:mcrypt_decrypt():接收到大小为44的初始化向量,但此加密模式需要大小为32 ...”使用此代码?

$sessionKey = "Secr3t_Sess1on!Key_4t6ydv98*w8ds";
$data = "clear text";

$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);


// Encode data
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
$key = mb_substr (hash('sha256', $sessionKey), 0, $keySize);
$encryptedData = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
$encryptedB64Data = base64_encode($iv.$encryptedData);


// Decode data
$data = base64_decode($encryptedB64Data, true);
$key = mb_substr (hash('sha256', $sessionKey), 0, $keySize);
$iv = mb_substr ($data, 0, $ivSize);
$data = mb_substr ($data, $ivSize);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
$decodedData =  rtrim($data, "\0");

1 回答

  • 1

    我认为问题是mb_substr方法 .

    $iv = mb_substr ($data, 0, $ivSize);
    

    $ data被视为多字节字符串 . 这就是为什么多个字符被计为一个多字节字符的原因 . 只需使用正常的substr函数即可 .

相关问题