Подтвердить что ты не робот

Размер ключа изменения ключа mcrypt_decrypt()

mcrypt_decrypt(): Ключ размера 15 не поддерживается этим алгоритмом. Поддерживаются только ключи с размерами 16, 24 или 32

Как я могу исправить эту проблему? мой ключ установлен - не может его изменить. Это должно быть локальное изменение, я думаю, что моя локальная версия PHP слишком продвинута для загруженного проекта. Как я могу это исправить?

4b9b3361

Ответ 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 или любым числом, вызывающим ошибку. Итак, что бы установить для ключа $, вам нужно изменить это на действительный код, а затем он должен работать нормально.