首先需要知道的是使用Crypt加密數據時生成的密文并不是唯一值,同一數據多次執行encrypt()加密結果都不相同,且在不同Laravel項目中也無法解密同一個密文。例如在Laravel項目A中用encrypt()生成的密文無法在項目B中用decrypt()解密,會拋出DecryptException異常,異常描述是The MAC is invalid.這是因為在使用Crypt對數據進行加密,所有加密值都通過一個消息認證碼(MAC)來檢測對加密字符串的任何修改,不同app_key的項目之間無法使用decrypt()解密。這是一種比之前常用的md5加密和sha1加密要安全得多的一種加密方式。
知道了這一點,DecryptException的兩種解決辦法也顯而易見:
- 在此項目中將數據再重新加密一次并保存到數據庫。
- 將之前項目.env文件中APP_KEY的值替換當前項目的APP_KEY。