Laravel 解密 () 抛出 "DecryptException The payload is invalid."
Laravel decrypt() throws "DecryptException The payload is invalid."
我有经过身份验证的用户,为了调试,我正在尝试使用 decrypt 显示他的密码(因为它是使用 encrypt()
.
加密的)
为了简化事情,我创建了一个新路由 /test
,我可以看到经过身份验证的用户的加密密码,如下所示:
Route::get('/test', function() {
dd(Auth::user()->password)
});
这个returns我:y$gdhYnCekBownWU62OitC6uSwoONfDWGO23FnaVwIgFPAeJI9L6DEa
但是如果我尝试使用,它会抛出这个错误:
Route::get('/test', function() {
dd(decrypt(Auth::user()->password))
});
DecryptException: The payload is invalid.
我试着四处搜索这个问题,我发现了两件事:
1) "Make sure app key is proper." 以前有过,但为了确定,我又 运行 php artisan key:generate
了。什么都没有改变。
2) "It is a CSRF issue"。我在 web 中禁用了来自中间件内核的 csrf,也没有任何改变。而且我没有使用 post 请求,所以我怀疑这是我的问题。
我需要它,因为场景是这样的:我需要解密密码,因为我事先使用这种方法生成了一个随机密码,并将其保存到数据库中;我想保留这种方法。
$randomPassword = rand(111111,999999);
$user->password = encrypt($randomPassword);
$user->save();
有谁知道这是什么原因或如何克服它?
You can't (link)。密码没有加密,它们被散列。这是一种方式,一旦被散列,就无法取消散列。
你试图做的是应该避免的事情。我想不出任何需要解密用户密码的用例。我认为你需要想出一个新的策略,也许从用户那里得到一个密码,比如:lastname/yearofbirth
我有经过身份验证的用户,为了调试,我正在尝试使用 decrypt 显示他的密码(因为它是使用 encrypt()
.
为了简化事情,我创建了一个新路由 /test
,我可以看到经过身份验证的用户的加密密码,如下所示:
Route::get('/test', function() {
dd(Auth::user()->password)
});
这个returns我:y$gdhYnCekBownWU62OitC6uSwoONfDWGO23FnaVwIgFPAeJI9L6DEa
但是如果我尝试使用,它会抛出这个错误:
Route::get('/test', function() {
dd(decrypt(Auth::user()->password))
});
DecryptException: The payload is invalid.
我试着四处搜索这个问题,我发现了两件事:
1) "Make sure app key is proper." 以前有过,但为了确定,我又 运行 php artisan key:generate
了。什么都没有改变。
2) "It is a CSRF issue"。我在 web 中禁用了来自中间件内核的 csrf,也没有任何改变。而且我没有使用 post 请求,所以我怀疑这是我的问题。
我需要它,因为场景是这样的:我需要解密密码,因为我事先使用这种方法生成了一个随机密码,并将其保存到数据库中;我想保留这种方法。
$randomPassword = rand(111111,999999);
$user->password = encrypt($randomPassword);
$user->save();
有谁知道这是什么原因或如何克服它?
You can't (link)。密码没有加密,它们被散列。这是一种方式,一旦被散列,就无法取消散列。
你试图做的是应该避免的事情。我想不出任何需要解密用户密码的用例。我认为你需要想出一个新的策略,也许从用户那里得到一个密码,比如:lastname/yearofbirth