[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: mcrypt_encrypt(): The IV parameter must be as long
z668
PHP выдает ошибку: `mcrypt_encrypt(): The IV parameter must be as long as the blocksize`

Что ему не нравится в векторе?

    // Ключ
$AES_Key = "93908027539382757893442837120983";

// Вектор
$AES_IV = "33985771209830270358974938292834";

// Методы
function encrypt($string)
{
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $AES_Key, addpadding($string), MCRYPT_MODE_CBC, $AES_IV));
}

function addpadding($string, $blocksize = 32)
{
$len = strlen($string);
$pad = $blocksize - ($len % $blocksize);
$string .= str_repeat(chr($pad), $pad);
return $string;
}



Аналогичный код на шарпе работает отлично:

 // Ключ
private const string AES_Key = "93908027539382757893442837120983";

// Вектор
private const string AES_IV = "33985771209830270358974938292834";

// Зашифровывает строку в AES CBC 256 PKCS7
internal static string AES_Encrypt(string inputStr)
{
byte[] xBuff = null;

using (var aes = new RijndaelManaged())
{
// Настройки
aes.KeySize = 256;
aes.BlockSize = 256;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
aes.Key = Encoding.UTF8.GetBytes(AES_Key);
aes.IV = Encoding.UTF8.GetBytes(AES_IV);

using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, aes.CreateEncryptor(aes.Key, aes.IV), CryptoStreamMode.Write))
{
byte[] textArr = Encoding.UTF8.GetBytes(inputStr);
cs.Write(textArr, 0, textArr.Length);
}

xBuff = ms.ToArray();
}
}


return Convert.ToBase64String(xBuff);
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.