【问题标题】:The Crypt::decript function stopped working after the Laravel 4.2 to 5.0 updateLaravel 4.2 到 5.0 更新后 Crypt::decript 函数停止工作
【发布时间】:2017-02-15 16:07:49
【问题描述】:

从 L4.2 升级到 L5 之后,函数 Crypt::decrypt 对 L4.2 上生成的哈希不起作用,但是我的 APP_KEY 还是一样的。

DecryptException in Encrypter.php line 147:
MAC is invalid.

更新后生成的哈希值确实有效,但迁移前的哈希值无效;

【问题讨论】:

  • 听起来默认密码在 4.2 和 5 版本之间发生了变化。我认为在 Laravel 4 中它是 MCRYPT_RIJNDAEL_128,而在 Laravel 5 中它似乎是 AES-256-CBC
  • 在 L5 上,我将密码设置为 MCRYPT_RIJNDAEL_128,以避免该问题,但仍然没有任何改变。仍然有错误。

标签: php laravel encryption laravel-5 laravel-4.2


【解决方案1】:

在我看来,由于列长度的原因,您的 64 个编码数据正在被删除,我认为您存储的内容相对较大。我刚刚通过在数据库中添加一个非常大的缓存值来重现您的错误。在您的架构中进行以下更改,回滚并重新运行迁移:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCacheTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('cache', function(Blueprint $table)
        {
            $table->string('key')->unique();
            $table->longText('value');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('cache');
    }

}

您之前粘贴的记录给了我一个 NULL,我认为这是因为它被剥离了。

迁移cache 表后。放置相同的缓存值并回读,希望这次不会出错。手指交叉!

来源:https://laracasts.com/discuss/channels/general-discussion/daeling-with-decryptexceptioninvalid-data

【讨论】:

  • 不要发布仅链接的答案。如果链接中的某些内容回答了问题,请将其与链接一起发布到此处。
  • @astratyandmitry 字符串的最大长度为 220,我的迁移设置为:$table->string('account_number', 255);而且我的 L4.2 哈希值无法解密
  • 你需要把$table-&gt;string('account_number')改成$table-&gt;longText('account_number')
  • @astratyandmitry,我做了这个改变并没有解决问题。我尝试使用 L4 将项目安装在其他文件夹中并创建一个命令来解密并保存在其他表上,但不起作用。
猜你喜欢
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 2020-07-12
相关资源
最近更新 更多