什么是 Crypt 门面
Laravel 的加密服务借助 OpenSSL 的 AES-256-CBC 加密(或 AES-128-CBC),通过简洁的接口提供数据加解密能力。 Laravel 加密后的值都会带上消息认证码(MAC) 签名。 一旦加密后的值被篡改,就无法再被解密。配置
生成 APP_KEY
在使用加密之前,需要设置config/app.php 中的 key。
该值会从 APP_KEY 环境变量中读取。
使用 php artisan key:generate 命令生成安全的密钥。
它会通过 PHP 的安全随机源生成密码学上安全的密钥。
.env 文件中。
密钥轮换
更改加密密钥会导致所有已认证用户的会话被登出。 因为 Laravel 会加密所有 Cookie(包括 Session Cookie)。 而且旧密钥加密的数据也无法再被解密。 为了缓解此问题,可以在APP_PREVIOUS_KEYS 中以逗号分隔列出旧密钥。
加密
使用Crypt 门面的 encryptString 方法进行加密。
加密值使用 OpenSSL 与 AES-256-CBC,且会带上 MAC 签名。
解密
使用Crypt 门面的 decryptString 方法解密。
若 MAC 无效或其它原因导致解密失败,会抛出 DecryptException。
模型转型(Cast)
在 Eloquent 模型中使用encrypted 转型可以自动加解密属性。
encrypted:* cast 内部使用 Crypt::encrypt 与 Crypt::decrypt。
数据库列类型建议使用 text 或 longText。实用示例:加密存储个人信息
以下是一个将个人信息(如个人编号、信用卡号等)安全存入数据库的典型模式。迁移
模型
控制器
小结
下一步
哈希
学习如何安全地对密码进行哈希与校验。
授权
介绍如何使用 Policy 与 Gate 进行访问控制。