openssl_encrypt - php encrypt password
mcrypt_decrypt() error cambiar tamaño de clave (8)
¿Actualizaste a 5.6? Dice
La clave inválida y los tamaños iv ya no son aceptados. mcrypt_decrypt () ahora emitirá una advertencia y devolverá FALSE si las entradas no son válidas. Anteriormente, las claves y los IV se rellenaban con ''/ 0'' bytes al siguiente tamaño válido.
php.net/manual/en/function.mcrypt-decrypt.php
Lea la última línea de esa cita, y allí encontrará su solución :)
mcrypt_decrypt (): la clave de tamaño 15 no es compatible con este algoritmo. Solo se admiten llaves de tamaños 16, 24 o 32.
Eso significa que necesita rellenar su clave con /0
(eso es lo que las versiones anteriores estaban haciendo por usted)
$key=$key."/0";
mcrypt_decrypt (): la clave de tamaño 15 no es compatible con este algoritmo. Solo se admiten llaves de tamaños 16, 24 o 32.
¿Cómo puedo solucionar este problema? Mi clave está configurada, no puedo cambiarla. Tiene que ser un cambio local, creo que mi versión local de PHP es demasiado avanzada para el proyecto que cargué. ¿Cómo puedo arreglar esto?
No es necesario rellenar la tecla con "/ 0".
Tuve el mismo problema al migrar a un nuevo servidor PHP 7 y recibí el mensaje:
mcrypt_decrypt (): la clave de tamaño 19 no es compatible con este algoritmo. Solo se admiten llaves de tamaños 16, 24 o 32.
La clave que tenía en el código era una cadena de 19 caracteres, simplemente la cambié a una cadena de 32 caracteres y todo estaba bien otra vez.
Entonces, como sugiere el mensaje de error, use una clave de tamaño válida.
Para Laravel 5
Simplemente ejecute php artisan key:generate
:
Application key [EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va] set successfully.
Si no ve su clave actualizada, simplemente péguela en su archivo .env
.
APP_KEY=EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va
Actualiza tu pagina
Puedes usar str_pad () para esto. En su forma más simple, esto será suficiente.
function padKey($key)
{
// Get the current key size
$keySize = strlen($key);
// Set an array containing the valid sizes
$validSizes = [16,24,32];
// Loop through sizes and return correct padded $key
foreach($validSizes as $validSize) {
if ($keySize <= $validSize) return str_pad($key, $validSize, "/0");
}
// Throw an exception if the key is greater than the max size
throw new Exception("Key size is too large");
}
Las otras respuestas estarán bien. Estoy aprovechando la función PHP incorporada str_pad aquí en lugar de agregar "/ 0" en un bucle.
Seguí adelante y creé una función basada en la respuesta de Hanky Panky .
Esto se puede usar con cualquier longitud de clave para asegurarse de que sea del tamaño correcto.
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;
}
Si su código de encriptación se ve así:
<?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);
}
?>
Usted querrá cambiar la clave $ a un código encriptado de 128 o 256 bits. Simplemente copié un código que generé desde aquí: Generar código
Creé un código de 256 bits para el mío que consta de 32 caracteres y, por lo tanto, soluciona el problema del tamaño de clave no válido de 15 o cualquier número que esté causando el error. Entonces, lo que sea que esté establecido para $ key necesitas cambiarlo por un código válido y luego debería funcionar bien.
Tuve el mismo problema, pero lo solucioné con esto.
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;
}
Tuve este problema con OSTicket 1.6 ST (sí, la versión anterior lo sé). La empresa de alojamiento acaba de ir a PHP 5.6 y rompió el Mail Fetch para cron.php. Estoy publicando esto con la esperanza de que ayude a otros a solucionar este problema más rápido.
Tienes que editar el archivo "include / class.misc.php".
Agregue la función "pad_key" proporcionada en la respuesta creada por @troskater al archivo "include / class.misc.php" y luego en la línea 51 en la función "descifrar"
ajuste de retorno (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ salt , ...
en lugar de usar
ajuste de retorno (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, pad_key ($ salt) , ...