【问题标题】:RuntimeException in EncryptionServiceProvider.php line 29: No supported encrypter found. The cipher and / or key length are invalidEncryptionServiceProvider.php 第 29 行中的 RuntimeException:未找到支持的加密器。密码和/或密钥长度无效
【发布时间】:2016-03-26 02:28:38
【问题描述】:

请不要认为这是重复的。

我查看了有关此错误的所有其他帖子,但没有一个有效。我正在使用 Heroku 进行推送,不久前它运行良好。 我已经完成了密钥:使用 'cipher' => 'AES-256-CBC' 生成 256。 它在 localhost 中运行良好,但在我推送后在 Heroku 中运行良好。 我已经尝试了所有解决方案,我必须遗漏一些东西,这令人沮丧。我不明白的是,即使我正在生成密钥,但仍然...... 请帮助我找到解决此错误的方法。 另外,这是我得到的错误输出:

    in EncryptionServiceProvider.php line 29
    at EncryptionServiceProvider->Illuminate\Encryption\{closure}(object(Application), array()) in Container.php line 734
    at Container->build(object(Closure), array()) in Container.php line 627
    at Container->make('encrypter', array()) in Application.php line 674
    at Application->make('encrypter') in Container.php line 838
    at Container->resolveClass(object(ReflectionParameter)) in Container.php line 801
    at Container->getDependencies(array(object(ReflectionParameter)), array()) in Container.php line 770
    at Container->build('Illuminate\Cookie\Middleware\EncryptCookies', array()) in Container.php line 627
    at Container->make('Illuminate\Cookie\Middleware\EncryptCookies', array()) in Application.php line 674


 at Application->make('Illuminate\Cookie\Middleware\EncryptCookies') in Pipeline.php line 123
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
    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 102
    at Pipeline->then(object(Closure)) in Kernel.php line 122
    at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
    at Kernel->handle(object(Request)) in index.php line 53
Thanks

【问题讨论】:

  • 如果没有代码,唯一的答案是在错误消息中。添加您的代码以及完整的错误信息。您是否设置了MCRYPT_RIJNDAEL_128MCRYPT_RIJNDAEL_256,即设置块大小,而不是密钥大小。你用什么做钥匙,她是什么?
  • 我已经用错误的整个输出编辑了我的帖子。另外,@limonte,我之前已经尝试过该解决方案,但没有帮助

标签: php laravel encryption heroku runtime


【解决方案1】:

只需使用命令 php工匠密钥:生成

并用你的 laravel 项目的 .env 文件中的 APP_KEY 替换它。

它对我有用。

【讨论】:

    【解决方案2】:

    你可以试试跑

     php artisan key:generate
    

    在客户端,并使用生成的密钥替换.env文件中的APP_KEY。

    【讨论】:

      【解决方案3】:

      最可能的原因是您的本地和 Heroku 之间安装了不同的加密库。有 2 个类似的底层加密库,openssl 和 mcrypt。有可能两者中的一个安装在本地,另一个安装在 Heroku。两者之间有一些区别,最明显的是 mcrypt 库具有 Rijndael 加密模式,而 openssl 具有 AES。两者功能相同,但名称不同。

      我建议您优先使用 openssl 而不是 mcrypt,因为它最近得到了维护。

      php -m 将显示安装了哪些模块。

      假设您安装了 openssl,您应该使用 AES-256-CBC 模式,并且您需要一个 32 个字符的密钥(256 位),不多也不少。

      【讨论】:

      • 我不太清楚如何检查,但我用 php -m 检查过,我确实看到了 openssl,而不是 mcrypt,因此,我相信我正在使用 openssl。另外,我正在使用 AES-256-CBC。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2016-03-20
      • 2018-06-18
      • 1970-01-01
      • 2015-10-09
      • 2016-06-11
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多