laravel找不到支持的加密器。密码和/或密钥长度无效


83

我正在使用Laravel构建一个项目。在localhost上运行正常,但是当我将其上载到服务器(服务器已安装comodo ssl)时,出现以下错误:

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

谁能帮助解决此错误?


我现在也有这个问题,更糟糕的是stackoverflow.com/questions/37505809/…–
udemethegrtman

Answers:


75

服务器上是否已安装所有必需的扩展程序?

  • PHP> = 5.5.9
  • OpenSSL PHP扩展
  • PDO PHP扩展
  • Mbstring PHP扩展
  • Tokenizer PHP扩展

可能是您缺少OpenSSL扩展名。另外,您是否在.env文件中设置了密钥?


尝试运行:

php artisan key:generate


答:'cipher' => ''没有设置。


.env值:APP_ENV =本地APP_DEBUG = true APP_KEY = zK7sr9SzegGEDFClzJDs0vAkpO8NvjZA DB_HOST = localhost DB_DATABASE = homestead DB_USERNAME = homestead DB_PASSWORD = secret CACHE_DRIVER = file SESSION_DRIVER = MA_IL_NAME_USER_DRIVE_ = IL_MAIL_DRIVER =文件MAQUE_DRIVER == null MAIL_ENCRYPTION = null
Rahman za

2
是您'cipher' => 'AES-256-CBC'config/app.php
Salkz

33
并运行php artisan key:generate以生成新密钥。
2015年

@Rahmanza我拥有所有这些扩展名,更改了密码类型并用于php artisan key:generate尝试解决问题,但该问题仍然存在。我的路线是否与此有关:```Route :: group(['middleware'=> ['web']],function(){Route :: get('/ login','PublicController @ login' ); Route :: post('/ login','AuthenticationController @ login'); Route :: group(['prefix'=>'admin','middleware'=>'auth'],function(){route: :get('dashboard',function(){echo'in dash';});});}); `
汤姆·伯德

95

您只需输入控制台:

php artisan key:generate

并且如果您的app.php没有更改此密钥,请手动更改。


接下来,如果您应该碰巧得到此错误消息:

[ErrorException]
file_get_contents(/path/to/my/project/.env):无法打开流:没有这样的文件或目录

然后制作该.env.example文件的副本,然后重试:

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

2
并检查是否已安装所有必需的扩展。
2015年

2
在将.env.example复制到.env之前
亚历克斯

9

我之前遇到过同样的问题,并且按照以下方式修复了它:转到config / app.php,更改"cipher" => "anything"

'cipher' => MCRYPT_RIJNDAEL_128,

默认值为,'cipher' => 'AES-256-CBC',但这应该不带引号!奇怪。
Webinan '16

这也对我有所帮助,因为我没有出现AES-256-CBC在受支持的密码列表中phpinfo()
Yuriy Dyachkov

8

我通过运行以下命令修复了该问题:

php artisan config:cache

就我而言,我是第一次使用Deployer。当我将项目符号链接到/ current文件夹时,出现了加密错误。创建缓存文件后将其修复。
thomas_inckx

7

我只是解决错误。

  1. Shift+Click 右键单击您的根项目中的“在此处打开推荐窗口”。
  2. 在控制台中输入:"php artisan key:generate"
  3. 得到32个字符的'Mark'config/app.php喜欢'key' => env('APP_KEY', 'insert get 32 char key'),//行号81

5

就我而言,我需要启用mcrypt扩展。

但首先,请检查您是否已经拥有它:

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

检查是否已加载mcrypt模块:

$ php -m | grep mcrypt

如果什么都没显示,是因为没有加载,但是您已经在右上方安装了吗?这样做:

$ php5enmod mcrypt
$ sudo service apache2 restart

再次检查,您应该看到mcrypt而不是什么。那是一个好兆头,重新加载您的应用并修复下一个错误;)

$ php -m | grep mcrypt
mcrypt

5

在根目录中,如果有.env.example文件,则将其更改为.env然后运行php artisan key:generate。这对我有用。


4

在控制台中写 php artisan key:generate

您将收到如下消息: Application key [get 32 char key] set successfully.

config/app.php像替换应用程序密钥'key' => env('APP_KEY', 'insert get 32 char key'),//line number 81


抱歉,我正在使用WAMP,但我不知道config/app.php文件所在。你能告诉我吗?
朱利安·莫雷诺

1
首先,你走你project folderwamp server,然后你会发现config文件夹,然后你会得到app.php。谢谢
Ms Shahadat Hossain 2015年


3

如果您使用的是app.php配置文件,而不是从.env文件中读取密钥,则可以删除密钥变量上的env()函数,例如:

'key' = env('someRandom36CharsString'),

'key' = 'someRandom36CharsString',

2

我设法解决了部署到实时Ubuntu服务器的过程,这是所有步骤

确保PHP> = 5.5.9

确保已安装OpenSSL,Mbstring,令牌生成器和mcrypt。

要在PHP(Ubuntu)中安装mcrypt:

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

使存储文件夹可写:

chmod -R 0777 storage

使Apache使用Lavarel / public文件夹作为主目录:

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

对我而言,主要的陷阱是FTP默认情况下可能不会复制隐藏文件: .env并且/public/.htaccess需要存在!

完成上述任务后,它可以在Ubuntu服务器上运行


1

在发现密钥已缓存在bootstrap \ cache \ config.php中之前,我经历了几个小时的苦难。删除了文件,我的网站加载正常(即,否则没有我的配置问题)。

我通过在boostrap \ cache \ compiled.php中添加一些调试输出以使其吐出密码和密钥(大约在7010行附近)发现了这一点。然后四处查看以了解它是如何获取配置的,并发现它使用了缓存配置文件。


1

请确保您的计算机中有此要求

  1. PHP> = 5.6.4
  2. OpenSSL PHP扩展
  3. PDO PHP扩展
  4. Mbstring PHP扩展
  5. Tokenizer PHP扩展
  6. XML PHP扩展

然后在安装或更新您的项目后

作曲家更新

在此之后,您有-

.env.example

复制并重命名为-

.env

并根据您的数据库配置或您需要的任何其他修改进行更改。

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

最后通过以下方式生成您的应用密钥:

PHP的工匠键:生成

对于某人来说,只有最后一步就足够了。但是每次克隆任何laravel项目时,我都会遇到这个问题。这整个步骤使它具有任何危险。


0

添加"illuminate/html": "~5.0"composer.json文件的“要求”部分。像这样:

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

然后运行composer install命令。当composer install得到完成。运行php artisan key:generate。您将收到如下消息:

Application key [get 32 char key] set successfully.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.