laravel No se encontró ningún cifrador compatible. El cifrado y / o la longitud de la clave no son válidos


83

Estoy construyendo un proyecto usando Laravel. Funcionaba bien en localhost, pero cuando lo subo al servidor (el servidor tiene comodo ssl instalado), recibo el siguiente error:

RuntimeException in EncryptionServiceProvider.php line 29:
No supported encrypter found. The cipher and / or key length are invalid
in EncryptionServiceProvider.php line 29
at EncryptionServiceProvider->Illuminate\Encryption\{closure}(object(Application), array()) in Container.php line 733
at Container->build(object(Closure), array()) in Container.php line 626
at Container->make('encrypter', array()) in Application.php line 674
at Application->make('Illuminate\Contracts\Encryption\Encrypter') in Container.php line 837
at Container->resolveClass(object(ReflectionParameter)) in Container.php line 800
at Container->getDependencies(array(object(ReflectionParameter)), array()) in Container.php line 771
at Container->build('SahraSalon\Http\Middleware\EncryptCookies', array()) in Container.php line 626
at Container->make('SahraSalon\Http\Middleware\EncryptCookies', array()) in Application.php line 674
at Application->make('SahraSalon\Http\Middleware\EncryptCookies') in Pipeline.php line 123
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 118
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 86
at Kernel->handle(object(Request)) in index.php line 54

¿Alguien puede ayudar a resolver este error?


Yo también tengo este problema ahora, peor stackoverflow.com/questions/37505809/…
udemethegrtman

Respuestas:


75

¿Tiene todas las extensiones necesarias instaladas en el servidor?

  • PHP> = 5.5.9
  • Extensión PHP OpenSSL
  • Extensión PHP PDO
  • Extensión PHP Mbstring
  • Extensión PHP Tokenizer

Es posible que te falte la extensión OpenSSL. Además, ¿tiene la llave en el .envarchivo?


Intenta ejecutar:

php artisan key:generate


Respuesta: 'cipher' => ''no se configuró.


.env valor: APP_ENV = APP_DEBUG locales = true APP_KEY = zK7sr9SzegGEDFClzJDs0vAkpO8NvjZA DB_HOST = localhost DB_DATABASE = homestead homestead DB_USERNAME = = DB_PASSWORD CACHE_DRIVER secreto = = archivo SESSION_DRIVER archivo QUEUE_DRIVER = sincronización MAIL_DRIVER = smtp MAIL_HOST = mailtrap.io MAIL_PORT = 2525 = null MAIL_USERNAME MAIL_PASSWORD = null MAIL_ENCRYPTION = null
Rahman za

2
Is your 'cipher' => 'AES-256-CBC'inconfig/app.php
Salkz

33
Y corre php artisan key:generatepara generar una nueva clave.
Salkz

@Rahmanza Tengo todas esas extensiones, cambié mi tipo de cifrado y solía php artisan key:generateintentar solucionar el problema, pero persiste. ¿Podrían mis rutas tener algo que ver con esto: `` `Ruta :: grupo (['middleware' => ['web']], función () {Ruta :: get ('/ login', 'PublicController @ login' ); Route :: post ('/ login', 'AuthenticationController @ login'); Route :: group (['prefix' => 'admin', 'middleware' => 'auth'], function () {route: : get ('tablero', function () {echo 'en el tablero';});});}); `` `
Tom Bird

95

Solo escribe en la consola:

php artisan key:generate

Y si su app.php no cambia esta clave, cámbiela manualmente.


A continuación, si aparece este mensaje de error:

[ErrorException]
file_get_contents (/path/to/my/project/.env): no se pudo abrir la secuencia: no existe tal archivo o directorio

Luego haga una copia del .env.examplearchivo e intente nuevamente:

cp .env.example .env
php artisan key:generate

2
Y compruebe si tiene instaladas todas las extensiones necesarias.
Rafael Bugajewski

2
antes de copiar .env.example a .env
Alex

9

Tengo el mismo problema antes y lo solucioné, siga de esta manera: vaya a config / app.php, cambie "cipher" => "anything"a

'cipher' => MCRYPT_RIJNDAEL_128,

el valor predeterminado es ¡¡ 'cipher' => 'AES-256-CBC',pero esto debería ser sin comillas !! Extraño.
Webinan

Eso también me ayudó, no estaba AES-256-CBCen la lista de cifrados compatibles como resultó dephpinfo()
Yuriy Dyachkov

8

Lo arreglé ejecutando esto:

php artisan config:cache

En mi caso, estaba usando Deployer por primera vez. Cuando estaba enlazando simbólicamente el proyecto a la carpeta / current, recibí el error de cifrado. La creación del archivo de caché lo solucionó.
thomas_inckx

7

Solo soluciono el error.

  1. Shift+Click botón derecho del mouse para "abrir la ventana de recomendación aquí" desde su proyecto raíz.
  2. En la consola, escriba: "php artisan key:generate" .
  3. Obtener 32 caracteres 'Mark' para config/app.phpgustar 'key' => env('APP_KEY', 'insert get 32 char key'), // número de línea 81

5

En mi caso, necesito habilitar la extensión mcrypt.

Pero primero, compruebe si ya lo tiene:

$ sudo apt-get install -y mcrypt php5-mcrypt

Compruebe si el módulo mcrypt está cargado:

$ php -m | grep mcrypt

si no aparece nada, es porque no está cargado, pero ya lo tienes instalado arriba ¿verdad? Entonces haz esto:

$ php5enmod mcrypt
$ sudo service apache2 restart

Vuelva a verificar y debería ver mcrypt en lugar de nada. Esa es una buena señal, recarga tu aplicación y repara tu próximo error;)

$ php -m | grep mcrypt
mcrypt

5

En el directorio raíz, si hay un .env.examplearchivo, cámbielo .envy ejecútelo php artisan key:generate. Esto funcionó para mí.


4

escribir en consola php artisan key:generate

recibirás un mensaje como: Application key [get 32 char key] set successfully.

reemplazar la clave de la aplicación en Me config/app.phpgusta'key' => env('APP_KEY', 'insert get 32 char key'),//line number 81


Lo siento, estoy usando WAMP pero no sé dónde se encuentra el config/app.phparchivo. ¿Podrías dejarme saberlo?
Julian Moreno

1
En primer lugar, ir project folderen wamp servery luego a encontrar configla carpeta por lo que recibirá app.php. gracias
Md Shahadat Hossain


3

Si está utilizando el archivo de configuración app.php en lugar de leer la clave del archivo .env, puede eliminar la función env () en la variable clave, por ejemplo:

'key' = env('someRandom36CharsString'),

a

'key' = 'someRandom36CharsString',

2

Logré resolver la implementación en el servidor Ubuntu en vivo, aquí están todos los pasos

Asegúrese de PHP> = 5.5.9

Asegúrese de que OpenSSL, Mbstring, Tokenizer y mcrypt estén instalados.

Para instalar mcrypt en PHP (Ubuntu):

sudo apt-get install php5-mcrypt,
sudo php5enmod mcrypt

Hacer que la carpeta de almacenamiento se pueda escribir:

chmod -R 0777 storage

Haga que Apache use la carpeta pública Lavarel / como inicio:

DocumentRoot /home/code2/public_html/Laravel-Project/public
    <Directory "/home/code2/public_html/Laravel-Project/public”> 
         AllowOverride all 
    </Directory>

El problema principal para mí es que FTP podría no copiar archivos ocultos de forma predeterminada: ¡ .envy /public/.htaccessdebe estar allí!

Después de completar las tareas anteriores, funcionó en el servidor Ubuntu


1

Estuve sufriendo este problema durante demasiadas horas antes de descubrir que la clave se estaba almacenando en caché en bootstrap \ cache \ config.php. Eliminé el archivo y mi sitio se cargó bien (es decir, no había problema con mi configuración).

Descubrí esto agregando algunos resultados de depuración a boostrap \ cache \ compiled.php para que escupiera el cifrado y la clave (en algún lugar alrededor de la línea 7010). Luego investigó para ver cómo estaba recogiendo la configuración y descubrió que usa un archivo de configuración de caché.


1

Asegúrese de tener estos requisitos en su máquina.

  1. PHP> = 5.6.4
  2. Extensión PHP OpenSSL
  3. Extensión PHP PDO
  4. Extensión PHP Mbstring
  5. Extensión PHP Tokenizer
  6. Extensión PHP XML

Luego, después de instalar o actualizar su proyecto por

actualización del compositor

Después de esto tienes ...

.env.example

Haga un duplicado y cámbiele el nombre a:

.env

y realice cambios de acuerdo con la configuración de su base de datos o cualquier otra modificación que necesite.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your db name
DB_USERNAME=username if any otherwise root
DB_PASSWORD= your password if not set leave blank

Finalmente, genere su clave de aplicación:

php clave artesanal: generar

Para alguien puede ser que solo el último paso sea suficiente. Pero tengo este problema cada vez que clono cualquier proyecto de laravel. Todo este paso lo hace con cualquier peligro.


0

Agregue "illuminate/html": "~5.0"para requerir la sección de su composer.jsonarchivo. Así:

...
"require": {
    ...
    "illuminate/html": "~5.0"
    ...
},
...

Luego ejecute el composer installcomando. Cuando composer installse complete. correr php artisan key:generate. Recibirá un mensaje como este:

Application key [get 32 char key] set successfully.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.