欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

production.ERROR: exception 'RuntimeException' with message 'No supported encrypter found. The cipher and / or key length are invalid.'

Laravel No supported encrypter found. The cipher and / or key length are invalid.

 

 

作者: 我不是鱼 (2016-06-26 09:17)分类: PHP   标签: Laravel key length invalid key:generate

 

克隆了一个Laravel的项目到本地,运行是出现这个错误:

RuntimeException in EncryptionServiceProvider.php line 29:
No supported encrypter found. The cipher and / or key length are invalid.

这个是因为项目根目录下的 .env 文件中的 APP_KEY 没设置对,默认是 APP_KEY=SomeRandomString,这个要改成自己的,但也不是随便改就行,Laravel 有提供可以通过命令行生成这个 key,在项目根目录下执行:

php artisan key:generate

完成后 .env 文件中的 APP_KEY 被修改成类似:

APP_KEY=4Hdy4BkW5JB0IyYAM9z7eV6HTtoXtX1c

至于这个命令做了什么,可以看这里 \Illuminate\Foundation\Console\KeyGenerateCommand :

$key = $this->getRandomKey($this->laravel['config']['app.cipher']);

if ($this->option('show')) {
    return $this->line('<comment>'.$key.'</comment>');
}

$path = base_path('.env');

if (file_exists($path)) {
    file_put_contents($path, str_replace(
        'APP_KEY='.$this->laravel['config']['app.key'], 'APP_KEY='.$key,
 file_get_contents($path)
    ));
}

其中:

protected function getRandomKey($cipher)
{
    if ($cipher === 'AES-128-CBC') {
        return Str::random(16);
    }

    return Str::random(32);
}

就是说这个 key 是根据 config/app.php 中的 cipher 值来决定长度是16还是32的随机字符串,Laravel 中默认是:

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

也就是32。所以其实可以不通命令行,直接修改 key,但必须是 key 长度必须是 32 就可以了。

 

前一篇: 安装 yii2 出现 Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
后一篇: PHP7 下安装 memcache 和 memcached 扩展

来自 http://www.lnmp.cn/laravel-key-length-are-invalid.html



laravel没有找到支持的encrypter。密码和/或密钥长度无效

我正在使用Laravel建立一个项目。它在本地主机上工作正常,但是当我将其上传到服务器(服务器已安装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

任何人都可以帮助解决这个错误?

 

正确答案
您是否在服务器上安装了所有必需的扩展?

  • PHP> = 5.5.9
  • OpenSSL PHP扩展
  • PDO PHP扩展
  • Mbstring PHP扩展
  • 令牌PHP扩展

可能是您缺少OpenSSL扩展。此外,您是否将密钥设置为.env文件?


尝试运行:

php artisan key:generate


答:'cipher' => ''不设定 .env文件

 

来自  https://stackoverflow.com/questions/31512970/laravel-no-supported-encrypter-found-the-cipher-and-or-...
所有这些扩展都是启用信息sahrasalon.com/info.php -  Rahman za Jul 20 '15 at 9:48
   
.ENV值:APP_ENV =本地APP_DEBUG =真APP_KEY = zK7sr9SzegGEDFClzJDs0vAkpO8NvjZA DB_HOST =本地主机DB_DATABASE =宅基地DB_USERNAME =宅基地DB_PASSWORD =保密= CACHE_DRIVER文件SESSION_DRIVER =文件QUEUE_DRIVER =同步MAIL_DRIVER = SMTP MAIL_HOST = mailtrap.io MAIL_PORT = 2525 MAIL_USERNAME = NULL MAIL_PASSWORD = null MAIL_ENCRYPTION = null -  Rahman za Jul 20 '15 at 9:51
2 
是你'cipher' => 'AES-256-CBC'config/app.php -  Salkz 七月 20'15 在9:56
28 
并运行php artisan key:generate生成一个新的密钥。 -  Salkz 七月 20'15 在9:59
1 
谢谢,它的工作现在,密码丢失 -  Rahman za Jul 20'15在10:02

您只输入控制台:

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 
并检查是否安装了所有必要的扩展。 -  拉斐尔 Aug 31 '15 at 16:44
2 
之前将.env.example复制到.env -  Ali Torabi 6月30日16时8分45分

以前我有同样的问题,我按照这样的方式修改:转到config / app.php,更改"cipher" => "anything"

'cipher' => MCRYPT_RIJNDAEL_128,
分享改善这个答案
 
   
默认值是'cipher' => 'AES-256-CBC',这个应该没有报价!奇怪。 -  Webinan 2月24日16时16分38分
   
非常感谢你的回答Vuong,你救了我更多的无意识的调试。 -  Francisco Hodge Mar 24 '16 at 7:56
1 
欢迎你,当我可以帮助某人时,我很开心! -  Vuong Tran 3月24日16时16分
   
你救了我男人:) -  梅根·福克斯 6月17日'16在12:34
   
这也帮助了我,我没有AES-256-CBC在支持的密码列表中,原来是phpinfo() -  user3198882 Jun 22 '16 at 12:22

我只是修复错误。

  1. Shift+Click 从您的根项目右键单击“打开这里的表达窗口”。
  2. 在控制台写:"php artisan key:generate"
  3. 获取32个字符'马克' config/app.php喜欢'key' => env('APP_KEY', 'insert get 32 char key'),//行号81
分享改善这个答案
 

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

分享改善这个答案
 

在我的情况下,我需要启用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
分享改善这个答案
 

写在控制台 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文件。你能让我知道吗 -  Julian Moreno 十月1''在18:33
1 
首先,你走你project folderwamp server,然后你会发现config文件夹,然后你会得到app.php。谢谢 -  Md Shahadat Hossain 10月2日'15在7:09

解决了:

php artisan key:generate

分享改善这个答案
 

我设法解决部署到现在的Ubuntu服务器,这里是所有的步骤

确保PHP> = 5.5.9

确保安装了OpenSSL,Mbstring,Tokenizer和mcrypt。

在PHP(Ubuntu)中安装mcrypt:

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

使存储文件夹可写:

chmod -R 0777 storage

使Apache使用Lavarel /公用文件夹作为家:

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

对我来说主要是疑难杂症可能FTP默认情况下不复制隐藏文件: .env/public/.htaccess需要在那里!

完成上述任务后,它在Ubuntu服务器上工作

分享改善这个答案
 

我遇到这个问题几个小时,之后我发现钥匙被缓存在bootstrap \ cache \ config.php中。删除文件和我的网站加载正常(即否则我的配置没有问题)。

我发现这是通过添加一些调试输出到boostrap \ cache \ compiled.php,使其吐出密码和密钥(在7010行附近)。然后挖出来看看它是如何拿起配置,发现它使用缓存配置文件。

分享改善这个答案
 

添加"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.
分享改善这个答案
 

请确保您的机器有此要求

  1. PHP> = 5.6.4
  2. OpenSSL PHP扩展
  3. PDO PHP扩展
  4. Mbstring PHP扩展
  5. 令牌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 artisan key:generate

对于有人可能只有最后一步就够了。但是每当我克隆任何一个laravel项目时,我都有这个问题。这整个步骤使任何危险。

分享改善这个答案
 

保护社区♦ 12月3日在'16 0:03

感谢您对此问题的关注。因为它吸引了低质量或垃圾邮件的答案,必须删除,所以现在发布答案需要在这个网站10 声望协会奖金不算)。 

你想回答这些回答的问题之一吗?

不是你要找的答案?浏览其他问题标记的

普通分类: