zoukankan      html  css  js  c++  java
  • 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加密吧。

     
  • 相关阅读:
    Django 类方式view进行进行用户验证
    Django-发送注册、忘记密码邮件验证-send_mail
    Django-当前菜单激活状态-模版 request | slice
    django url路由参数错误
    video.js不能控制本地视频或者音频播放时长
    Django中url使用命名空间的错误
    python_求相邻数
    scrapy_移除内容中html标签
    scrapy-redis功能简介
    Determining IP information for eth0...failed 错误解决
  • 原文地址:https://www.cnblogs.com/caicaizi/p/5975640.html
Copyright © 2011-2022 走看看