laravel项目报错DecryptException:The MAC is invalid.

1.问题描述

把Laravel项目上传至服务器,本地数据库导出再导入至服务器数据库,一切运行正常,但是当进行用户登录时报错

DecryptException in compiled.php line 13238: The MAC is invalid

DecryptException in BaseEncrypter.php line 48: The MAC is invalid

2.解决过程

上网查询发现很多人说是laravel的key问题,要重新生成一下,清除缓存。但是试过发现错误由

DecryptException in compiled.php line 13238: The MAC is invalid

变成了

DecryptException in BaseEncrypter.php line 48: The MAC is invalid

问题还是没有解决

然后在技术群里询问,有人说把数据库里的数据在服务器端重新encrypt生成一遍导入数据库,可能是因为Laravel中的encrypt函数和计算机的mac地址进行了绑定,

重新清掉了服务器数据库里的用户表,然后用seeder重新填充数据,再次调试发现问题解决。

对比本地数据库中经过encrypt加密的用户密码和服务器数据库中的,发现同样的密码生成的加密数据却不一样,证明encrypt加密和环境有关,翻阅手册发现有对加密的介绍。

设置:

在使用 Laravel 的加密功能前,你需要先为 config/app.php 配置文件中的 key 参数设置一个值,这个值是一个包含 32 个随机字符的字符串。如果这个值没有正确设置,所有由 Laravel 加密的数据都是不安全的。

基本用法:

加密

通过 Crypt facade 可以加密一段数据。所有加密采用的都是 OpenSSL 和 AES-256-CBC cipher。并且,所有加密过的数据都会被赋予一个“信息验证码”(MAC),以防被加密后所得到的字符串被篡改。

由此说明encrypt生成的值和key有关,并且加密数据后会赋予一个mac用在解密时的安全验证,由于项目更换环境后需要重新生成key,所以之前生成的数据在新的环境无法解密,

3.总结

以上报错说MAC值无效并不是计算机mac地址,而是laravel的encrypt加密与其app_key有关,并且为每一个数据赋予了一个特殊的mac验证码。

更换环境后需要先重新生成key,然后数据库中使用encrypt加密数据需要重新加密。

由此说明一旦app_key修改的话,数据库中大量的encrypt加密数据将全部作废,这不利于数据库的迁移和备份,所以还是使用hash加密吧。

时间: 2024-10-12 15:17:26

laravel项目报错DecryptException:The MAC is invalid.的相关文章

Laravel 项目登录报错:The MAC is invalid.

在 Laravel 项目完成部署到服务器.数据库导入成功后 后台登录报错: 谷歌一下,发现好些同样问题,看了看,有个很有意思: 我需要一个笑哭的表情来描述我现在的心情,clear artisan cache, clear composer cache, dump autoload, empty browser cahe -- still nothing.搞了这么一大串竟然是 still nothing. 好的,第一回抱着非常 happy 的心情调 Bug. 继续找,找啊找...... 咦,找到了

cocos2dx 2.2.3 xcode5.0,新建mac项目报错

cocos2dx 2.2.3 xcode5.0,新建mac项目报错 Undefined symbols for architecture x86_64: "cocos2d::extension::LabelReader::createInstance()", referenced from: cocos2d::extension::GUIReader::GUIReader() in GUIReader.o "cocos2d::extension::ButtonReader::

quick3.3final版创建项目报错解决

quick3.3final版创建项目报错解决 今天新下载了quick3.3final版,于是安装,创建项目,打开player新建项目如下图 然后点击创建,就发生了如下错误,相信应该有不少朋友会碰到的 首先,这里有两个错误 1.PHP Notice:  Undefined index: extracmd in /Users/wangmeng/Documents/quick-3.3/quick/bin/lib/quick/ProjectCreator.php on line 117 这是117行有未

导入项目报错

导入别人的项目报错就是环境不一致,无非是就是tomcat版本.JDK版本不一样:还有如果有关于servlet报错的问题也是关于tomcat的原因,因为servlet的实现是由各个服务器厂商发布的(想查找servlet实现类的源码需要引入tomcat源码). 接下来导入项目: 1.导入项目之前,请确认工作空间编码已设置为utf-8:window->Preferences->General->Wrokspace->Text file encoding->Other 选择UTF-8

Maven新建项目报错

在Eclipse下使用maven新建立的项目报错.有三个错误,一直没有找到合适的方法,今天终于解决了. 第一个错误:pom.xml报错. 解决办法:运行 maven install. 第二个错误:jsp文件报错,原因:缺少servlet-api包. 解决办法:去maven中央仓库下载.即在pom.xml文件中加入servlet-api的依赖. 第三个错误:src/main/java文件夹丢失. (1):   '右键build path -> configure build path -> so

Android见招拆招九:字符编码问题导入项目报错

导入项目报错 问题原因及解决 字符编码问题,UTF-8和GBK Android见招拆招九:字符编码问题导入项目报错,布布扣,bubuko.com

利用Eclipse中的Maven构建Web项目报错

利用Eclipse中的Maven构建Web项目 1.在进行上述操作时,pom.xml一直报错 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.o

php项目报错 Warning: session_start(): open(D:/software/wamp/wamp/tmp\sess_msrjot7f32ciqb1p2hr4ahejg4, O_RDWR) f

今天一个php项目报错: Warning: session_start(): open(D:/software/wamp/wamp/tmp\sess_msrjot7f32ciqb1p2hr4ahejg4, O_RDWR) f 解决方式: 我直接在D:/software/wamp/wamp/ 建立了一个tmp文件夹就可以了,解决了警告与乱码的问题 如果已经有该文件夹,就查一下看看有没有写入的权限 主要是存储一些session信息

NetBeans运行项目报错

1.错误描述 严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/FoundationDatabase]] at org.apache.catalina.util.LifecycleBase.start(Lifecy