唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确。 laravel 5.3

问题描述 投票:51回答:11

我使用composer安装了一个新的laravel 5.3副本,但我一直收到这个错误:

唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确。即使我在config目录中的app.php文件指定 'cipher'=>'AES-128-CBC',

configuration installation laravel-5.3
11个回答
85
投票

您需要在您的应用程序文件夹上安装.env然后运行:

$ php artisan key:generate

如果您没有.env.example的.env副本:

$ cp .env.example .env

0
投票

如果artisan命令不起作用并且您在命令行中遇到相同的错误,这意味着编写器在获取所有文件方面做得不好,您应该删除vendor文件夹并再次运行composer update


0
投票

如果您使用composer create-project --prefer-dist laravel/laravel market等命令重新创建laravel项目并使用cp命令将新repo部署到应用程序路径,则可能会遇到此问题。

我用laravel 5.4

roofe@www:~/market$ php artisan --version
Laravel Framework 5.4.33

创建laravel项目时,您可以看到创建密钥的日志,如下所示:

生成自动加载文件

Illuminate \ Foundation \ ComposerScripts :: postUpdate php artisan optimize生成优化的类加载器已删除已编译的服务文件。 php artisan key:生成应用程序密钥[base64:exxxxxxxxxxxxxxxxxxxxxxxxxxxxxx / k =]设置成功。

默认情况下,config / app.php中的密钥配置如下,它使用AES-256-CBC,创建项目时生成的密钥存储在.env文件中。如果使用cp -r ./* /var/www/market/之类的命令,.env文件将不会移动到应用程序路径。

/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/

'key' => env('APP_KEY'),

'cipher' => 'AES-256-CBC',

当我将部署命令更改为cp -r ./* ./.env /var/www/market/时,这个问题就消失了。

你也可以参考这个github issue


19
投票

在终端上运行此命令:

php artisan配置:清除 然后 php artisan config:cache


15
投票

运行php artisan key:generate

php artisan config:clear

然后php artisan config:cache

事情将开始奏效!


8
投票

如果您是第一次在该机器上运行Laravel项目,请确保您具有必要的requirements。在项目目录中打开CMD / Terminal或

cd to/your/project/dir

再次发出此命令:

composer update

将您的.env.example更改为.env并对该文件进行必要的更改,尤其是数据库配置,以避免db错误。然后

php artisan key:generate

每次创建Laravel项目或从git克隆它时,这都解决了这个AES密码密钥长度问题。


7
投票

好吧,这基本上已经得到了解答,但我发现了一些令人惊愕或便秘的警告,其中一个......

首先,正如已经说过的那样,你应该确保你有一个有效的.env文件,你可以通过复制现有的.env.example文件在终端中完成:

$ cp .env.example .env

然后,生成您的应用程序密钥

$ php artisan key:generate

完成后,请确保打开.env文件并确保APP_KEY行看起来正确 - 这是我惊愕的地方:

APP_KEY=base64:MsUJo+qAhIVGPx52r1mbxCYn5YbWtCx8FQ7pTaHEvRo=base64:Ign7MpdXw4FMI5ai7SXXiU2vbraqhyEK1NniKPNJKGY=

您会注意到密钥长度错误,由于某些未知原因(可能来自运行密钥:多次生成),其中有两个base64=密钥。删除一个是解决我遇到的问题,这似乎是一个Artisan / Laravel错误。

希望这个答案可以帮助任何可能遇到同样问题或烦恼的人。


5
投票

跟着这些步骤:

第1步:确保您的应用程序中有.env文件。如果没有运行此命令cp .env.example .env

步骤2:现在运行以下命令(php artisan key:generate)生成密钥,它将自动保存在.env文件中。

第3步:运行php artisan config:cache

它会解决所有问题。


2
投票

检查你的.env文件,如果没有设置APP_KEY,那就是问题,现在运行php artisan key:generate然后运行php artisan config:cache

它会在你的.env文件中设置一个APP_KEY密钥。

如果已设置APP_KEY,则运行相同的命令。它会更新此密钥。


1
投票

.env文件中给出这个键,你就完成了

APP_KEY=ABCDEF123ERD456EABCDEF123ERD456E

还是行不通?

如果您使用cli工作,请重新启动服务器。

想要解释?

好的,因为错误信息说:

唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确。

AES-128-CBC的密钥长度为16个字符,例如ABCDEF123ERD456E

AES-256-CBC的密钥长度为32个字符,例如ABCDEF123ERD456EABCDEF123ERD456E

确保在config/app.phpcipher被设置为适合的密码,如上面的两个,并且键指向.env文件APP_KEY变量。我的应用程序有AES-256-CBC密码集,所以我给了它像APP_KEY=ABCDEF123ERD456EABCDEF123ERD456E这样的32个字符键,之后一切正常。


0
投票

另一件需要检查的是.env文件位于www-data组(或httpd或您的Web服务器组中的任何组件)中,并且该组具有读取权限。

在linux上,当我收到此错误时,我的权限看起来像这样: -rw-rw-r-- 1 kevin kevin 618 Mar 16 09:32 .env 然后我只删除了所有的读取权限并删除了组的写入权限。 chmod 640 .env 然后我将组更改为www-data chown kevin:www-data .env 我的权限现在看起来像这样: -rw-r----- 1 kevin www-data 516 Mar 16 09:35 .env

© www.soinside.com 2019 - 2024. All rights reserved.