頂部導航開始 -->

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加密吧。

自學php博客

自學php博客
請先登陸后發表評論
  • 最新評論
  • 總共0條評論
  • ? 2014-2016 zixuephp.cn 版權所有
  • ICP證:皖ICP備16012107號
  • 聯系郵箱:[email protected]
  • 交流請加微信:weibobf2899 或掃下方二維碼
双大床红利扑克1手APP