Crypt Facade 是什麼
Laravel 的加密服務透過 OpenSSL 的 AES-256-CBC 加密(或 AES-128-CBC),以簡潔的介面提供值的加密與解密。 Laravel 加密的每個值皆會由**訊息驗證碼(MAC)**簽署。 若加密後的值遭到竄改,將無法被解密。設定
產生 APP_KEY
使用加密前,需先設定config/app.php 的 key。
此值會從 APP_KEY 環境變數讀取。
請使用 php artisan key:generate 指令產生安全的金鑰。
它會透過 PHP 的安全隨機產生器產生密碼學上安全的金鑰。
.env。
加密金鑰輪替
若變更加密金鑰,會使所有已認證使用者的 session 登出。 因為 Laravel 對包含 session cookie 在內的所有 cookie 都進行加密。 此外,用舊金鑰加密的資料將無法解密。 為緩解此問題,可以在APP_PREVIOUS_KEYS 以逗號分隔列出舊金鑰。
加密
使用Crypt Facade 的 encryptString 方法加密值。
加密後的值採 OpenSSL 與 AES-256-CBC,並經由 MAC 簽署。
解密
使用Crypt Facade 的 decryptString 方法解密加密的值。
當 MAC 無效等,無法正常解密時會拋出 DecryptException。
模型的 Cast
在 Eloquent 模型中使用encrypted cast,就能自動加密 / 解密屬性。
encrypted:* cast 內部使用 Crypt::encrypt 與 Crypt::decrypt。
資料庫欄位型別建議使用 text 或 longText。實用範例:個資的加密儲存
以下是將個資(身分證字號、信用卡號等)安全地存入資料庫的典型作法。Migration
模型
控制器
總結
下一步
雜湊
學習密碼的安全雜湊化與驗證方式。
授權
說明使用 Policy 與 Gate 的存取控制。