如何解决Laravel 8中负载突然变为空时的“负载无效”问题

qncylg1j  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(120)

我在尝试解密先前加密的密码时不断收到此错误:

The payload is invalid.

下面是相关的堆栈跟踪:

#0 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php(136): Illuminate\Encryption\Encrypter->getJsonPayload(NULL)
#1 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php(164): Illuminate\Encryption\Encrypter->decrypt('eyJpdiI6InloT0U...', false)
#2 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\Encryption\Encrypter->decryptString('eyJpdiI6InloT0U...')
#3 /home/improojf/public_html/app/Models/Server.php(29): Illuminate\Support\Facades\Facade::__callStatic('decryptString', Array)
#4 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(473): Server->getPasswordAttribute('eyJpdiI6InloT0U...')

这里最大的问题是一个字符串在加密器代码中随机地变成NULL,这对我来说毫无意义。
另一个问题是,一些记录只是表现广告的意图。

它的用途是什么它用于在数据库中存储smtp/pop3服务器的密码
我尝试过的这个问题通过不加密/解密密码得到了完美的解决,这会打乱目的
**是否始终返回错误?**否,实际上有些记录行为正常
我的猜测是什么php artisan cache:clear可能是其他地方报告的一个选项,但我认为应该有其他解决方案。到目前为止,我有(未经测试的)以下访问器,而以前我只有第二个try/catch

public function getPasswordAttribute($value){
    try {
        return Crypt::decryptString($value);
    } catch (\Illuminate\Contracts\Encryption\DecryptException $e) {
        \Illuminate\Support\Facades\Artisan::call('cache:clear');
    }
    try {
        return Crypt::decryptString($value);
    } catch (\Illuminate\Contracts\Encryption\DecryptException $e) {
        if(app()->runningUnitTests())
            return $value;
        else
            throw $e;
       }
}
i2byvkas

i2byvkas1#

根据正式文件
Laravel的加密服务提供了一个简单、方便的接口,用于通过OpenSSL使用AES-256和AES-128加密对文本进行加密和解密。
Laravel的所有加密值都使用消息身份验证代码(MAC)进行签名,因此它们的底层值一次也不能被修改或篡改

在使用Laravel的加密器之前,您必须在config/app.php配置文件中设置key配置选项。

这意味着加密解密取决于app key值如果生成新应用密钥,则旧加密值将无法与新应用密钥一起使用
参考:https://laravel.com/docs/8.x/encryption

已更新

问题是由于数据类型varchar(191),加密值部分存储在数据库表中。
因此,最好将数据类型varchar(191)更改为longtexttext

atmip9wb

atmip9wb2#

使用可空文本或长文本列

相关问题