我使用composer安装了一个新的laravel 5.3副本,但我一直收到这个错误:
唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确。即使我在config目录中的app.php文件指定 'cipher'=>'AES-128-CBC',
您需要在您的应用程序文件夹上安装.env然后运行:
$ php artisan key:generate
如果您没有.env.example的.env副本:
$ cp .env.example .env
如果artisan命令不起作用并且您在命令行中遇到相同的错误,这意味着编写器在获取所有文件方面做得不好,您应该删除vendor文件夹并再次运行composer update
。
如果您使用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。
在终端上运行此命令:
php artisan配置:清除 然后 php artisan config:cache
运行php artisan key:generate
。
做php artisan config:clear
,
然后php artisan config:cache
事情将开始奏效!
如果您是第一次在该机器上运行Laravel项目,请确保您具有必要的requirements。在项目目录中打开CMD / Terminal或
cd to/your/project/dir
再次发出此命令:
composer update
将您的.env.example
更改为.env
并对该文件进行必要的更改,尤其是数据库配置,以避免db错误。然后
php artisan key:generate
每次创建Laravel项目或从git克隆它时,这都解决了这个AES密码密钥长度问题。
好吧,这基本上已经得到了解答,但我发现了一些令人惊愕或便秘的警告,其中一个......
首先,正如已经说过的那样,你应该确保你有一个有效的.env
文件,你可以通过复制现有的.env.example
文件在终端中完成:
$ cp .env.example .env
然后,生成您的应用程序密钥
$ php artisan key:generate
完成后,请确保打开.env文件并确保APP_KEY行看起来正确 - 这是我惊愕的地方:
APP_KEY=base64:MsUJo+qAhIVGPx52r1mbxCYn5YbWtCx8FQ7pTaHEvRo=base64:Ign7MpdXw4FMI5ai7SXXiU2vbraqhyEK1NniKPNJKGY=
您会注意到密钥长度错误,由于某些未知原因(可能来自运行密钥:多次生成),其中有两个base64=
密钥。删除一个是解决我遇到的问题,这似乎是一个Artisan / Laravel错误。
希望这个答案可以帮助任何可能遇到同样问题或烦恼的人。
跟着这些步骤:
第1步:确保您的应用程序中有.env文件。如果没有运行此命令cp .env.example .env
步骤2:现在运行以下命令(php artisan key:generate
)生成密钥,它将自动保存在.env文件中。
第3步:运行php artisan config:cache
它会解决所有问题。
检查你的.env文件,如果没有设置APP_KEY,那就是问题,现在运行php artisan key:generate
然后运行php artisan config:cache
它会在你的.env文件中设置一个APP_KEY密钥。
如果已设置APP_KEY,则运行相同的命令。它会更新此密钥。
在.env
文件中给出这个键,你就完成了
APP_KEY=ABCDEF123ERD456EABCDEF123ERD456E
还是行不通?
如果您使用cli工作,请重新启动服务器。
想要解释?
好的,因为错误信息说:
唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确。
AES-128-CBC
的密钥长度为16个字符,例如ABCDEF123ERD456E
AES-256-CBC
的密钥长度为32个字符,例如ABCDEF123ERD456EABCDEF123ERD456E
确保在config/app.php
中cipher
被设置为适合的密码,如上面的两个,并且键指向.env
文件APP_KEY
变量。我的应用程序有AES-256-CBC
密码集,所以我给了它像APP_KEY=ABCDEF123ERD456EABCDEF123ERD456E
这样的32个字符键,之后一切正常。
另一件需要检查的是.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