Размер ключа изменения ключа mcrypt_decrypt()
mcrypt_decrypt(): Ключ размера 15 не поддерживается этим алгоритмом. Поддерживаются только ключи с размерами 16, 24 или 32
Как я могу исправить эту проблему? мой ключ установлен - не может его изменить.
Это должно быть локальное изменение, я думаю, что моя локальная версия PHP слишком продвинута для загруженного проекта.
Как я могу это исправить?
Ответы
Ответ 1
Вы обновили до 5.6? В нем говорится:
Недопустимые значения ключа и iv больше не принимаются. mcrypt_decrypt() теперь выдает предупреждение и возвращает FALSE, если входы недействительны. Раньше клавиши и IV были дополнены байтами '\ 0' до следующего допустимого размера.
Ссылка
Прочитайте последнюю строку этой цитаты, и там вы найдете свое решение:)
mcrypt_decrypt(): Ключ размера 15 не поддерживается этим алгоритмом. Поддерживаются только ключи с размерами 16, 24 или 32
Это означает, что вам нужно поместить свой ключ с помощью \0
(что для вас делали предыдущие версии)
$key=$key."\0";
Ответ 2
Я пошел вперед и создал функцию, основанную на Hanky 웃 Panky answer.
Это можно использовать с любой длиной ключа, чтобы убедиться, что он правильный.
function pad_key($key){
// key is too large
if(strlen($key) > 32) return false;
// set sizes
$sizes = array(16,24,32);
// loop through sizes and pad key
foreach($sizes as $s){
while(strlen($key) < $s) $key = $key."\0";
if(strlen($key) == $s) break; // finish if the key matches a size
}
// return
return $key;
}
Ответ 3
Для Laravel 5
Просто запустите php artisan key:generate
:
Application key [EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va] set successfully.
Если вы не видите обновленный ключ, просто вставьте его в свой .env
файл.
APP_KEY=EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va
Обновить страницу
Ответ 4
Вам не нужно набивать ключ "\ 0".
У меня была такая же проблема при переносе на новый сервер PHP 7, и я получил сообщение:
mcrypt_decrypt(): Ключ размера 19 не поддерживается этим алгоритмом. Только ключи с размерами 16, 24 или 32.
Ключ, который у меня был в коде, был строкой из 19 символов, я просто изменил его на строку из 32 символов, и все было хорошо.
Итак, как следует из сообщения об ошибке, используйте действительный размер ключа.
Ответ 5
У меня была эта проблема с OSTicket 1.6 ST (да, старая версия, которую я знаю). Хостинговая компания просто отправилась на PHP 5.6, и она сломала Mail Fetch для cron.php. Я отправляю это в надежде, что это поможет другим решить эту проблему быстрее.
Вы должны отредактировать файл "include/class.misc.php".
Добавьте функцию "pad_key", предоставленную в ответе автора @troskater, в файл "include/class.misc.php", а затем в строке 51 в функции "decrypt" change
return trim (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $salt,...
вместо этого используйте
return trim (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, pad_key ($ salt),...
Ответ 6
У меня была та же проблема, но я исправил ее с помощью
public function setKey($key) {
$len = strlen($key);
if($len < 24 && $len != 16){
$key = str_pad($key, 24, "\0", STR_PAD_RIGHT);
} elseif ($len > 24 && $len < 32) {
$key = str_pad($key, 32, "\0", STR_PAD_RIGHT);
}elseif ($len > 32){
$key = substr($key, 0, 32);
}
$this->key = $key;
}
Ответ 7
Если ваш код шифрования выглядит следующим образом:
<?php
function encryptCookie($value){
if(!$value){return false;}
$key = 'aNdRgUkXp2s5v8y/B?E(H+MbQeShVmYq';
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
return trim(base64_encode($crypttext)); //encode for cookie
}
function decryptCookie($value){
if(!$value){return false;}
$key = 'aNdRgUkXp2s5v8y/B?E(H+MbQeShVmYq';
$crypttext = base64_decode($value); //decode cookie
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
return trim($decrypttext);
}
?>
Вам нужно изменить ключ $на 128 или 256-битный зашифрованный код. Я просто скопировал код, который я создал здесь: Сгенерировать код
Я создал 256-битный код для моего, который состоит из 32 символов и, таким образом, устраняет проблему с недопустимым размером ключа 15 или любым числом, вызывающим ошибку. Итак, что бы установить для ключа $, вам нужно изменить это на действительный код, а затем он должен работать нормально.