在Laravel注册我使用加密算法的密码,而不是内置的bcrypt函数在Laravel,因为要获得密码,并将其发送到邮件时忘记密码。
但是解密它显示一个错误
DecryptException The MAC is invalid in Encrypter.php (line 184)
这,当我运行这段代码,它是在本地工作,但服务器本身,它是不工作的下面我提到的代码,有人能请帮助
public function forgotpassword(Request $request)
{
$email=$request->email;
$selectemail = User::select('email','password','name')
->where('email',$email)
->first();
if($selectemail)
{
$password=decrypt($selectemail->password);
$data = array( 'email' => $selectemail->email,'password' => $password , 'name' => $selectemail->name);
Mail::send('email.resetpassword',$data,function($message) use ($email)
{
$message->to([$email])->subject('Forgot Password Letgo');
});
echo "Mail has sent successfully";
} else {
echo "This email is not yet registered";
}
}
7条答案
按热度按时间afdcj2ne1#
问题是您生成了一个新的APP_KEY,然后如果您尝试解密旧的加密数据,它将显示
DecryptException: The MAC is invalid
。如果你想解密旧数据,你需要恢复你的旧APP_KEY.
在意识到这一点之后,现在又增加了一个新的问题,如果使用另一个APP_KEY或另一种加密方法存储新数据,则数据会出现问题,因为它们在表中混合在一起。
如果你不知道什么时候开始使用新的加密方法或区分新的加密条目,最快的解决方案是使用新的加密方法重置所有密码。
您可以了解有关Laravel加密如何在官方Laravel docs上工作的更多信息。
vtwuwzda2#
我将
APP_KEY
从它工作的环境dev复制到production,问题解决了。您可能想尝试一下。hc8w905p3#
如果以上这些都没有帮助到你,就像我的情况一样,那么,有些人提到清除cookie,可悲的是,至少可以说这是模棱两可的。
我尝试了上面的一切,清除缓存在laravel和浏览器,硬重新加载和所有..没有成功!
解决方案:完全关闭浏览器,然后重新打开。在我的例子中,我同时使用Chrome和Opera,它们都很混乱。我不得不同时关闭它们,然后重新打开它们,Mac的问题才消失。
tyky79it4#
为了避免这种情况,请使用自定义密钥。默认密钥是APP_KEY,但您可以提供一个密钥,这样您的解密就不会与新的或旧的APP_KEY链接。我使用以下代码来解决它,它在不同的APP_KEY中工作。
对于密钥长度很重要:如果$cipher == 'AES-128-CBC',则使用$length === 16;如果$cipher == 'AES-256-CBC',则使用$length === 32)。请在
config/app.cipher
中检查您的应用使用的密码。pgx2nnw85#
应用密钥在加密和解密中很重要。我有2个子域,它们具有不同的项目,我在子域1上加密值,并尝试在子域2上解密。当两个项目具有相同的应用密钥时,问题得到解决。注意:任何项目都不应具有相同的appkey!!!
如果您已经将DB从一个环境导入到另一个环境中,则很可能会遇到此错误。建议使用与数据源应用程序相同的APP_KEY来修复错误。
yvt65v4c6#
如果您运行多个项目,并将一个加密密钥传递到另一个项目,只需确保您已将相同的APP_KEY到您的两个项目.
hsgswve47#
如果您在同一个浏览器中本地运行了2个不同的Laravel应用程序,Cookie可以保存在您的浏览器中。请在加载2n应用程序之前清除该高速缓存和Cookie。