Laravel 5.3&加密 - 无效的有效载荷

时间:2017-11-23 09:36:50

标签: php encryption laravel-5.2

我有一个我在Laravel 5.23中写的应用程序。在我使用:

存储到表中之前,我正在加密某些敏感用户数据
'Crypt'     => Illuminate\Support\Facades\Crypt::class,

该字段的迁移是:

$table->string('field_account_name')->nullable();

我在课堂上设置了变异器来执行此操作:

public function getFieldAccountNameClearAttribute($value)
{
    if ($this->field_account_name) {
        try {
            return Crypt::decrypt($this->field_account_name);
        } catch (DecryptException $e) {
            return 'INVALID';
        }
    } else {
        return $this->field_account_name;
    }
}

public function setFieldAccountNameClearAttribute($value)
{
    $this->attributes['field_account_name'] = Crypt::encrypt($value);
}

这已经很长时间了,但是用户在一周前放弃了他们的魔法并触发了:

Exception 'ErrorException' with message 'The payload is invalid

我设法通过在字段中放置特殊字符(例如')作为带空格的长字符串的一部分来复制问题。

日期已加密并存储,但在检索时失败。

我是否应该从前端的加密中排除字符以避免这种情况?我找不到答案。

或者字段可能是text而不是字符串?

1 个答案:

答案 0 :(得分:2)

问题可能与您尝试加密的数据量及其在数据库中的存储方式有关。如果加密文本超过255个字符,则在将其添加到数据库时会被截断,这意味着它无法解密。

您应该将现有迁移更新为:

$table->text('field_account_name')->nullable();

或在新迁移中使用以下内容:

$table->text('field_account_name')->nullable()->change();