当您首次安装 October 时,应该已经为您生成了一个随机密钥。您可以通过检查位于您的 config/app.php 配置文件中的 key 选项来确认这一点。如果密钥未更改,您应该将其设置为一个 32 字符的随机字符串。如果此值未正确设置,所有加密值都将不安全。
Hash 门面提供安全的 Bcrypt 哈希,用于存储用户密码。Bcrypt 是哈希密码的绝佳选择,因为它的“工作因子”是可调整的,这意味着随着硬件性能的提高,生成哈希所需的时间可以增加。
您可以通过调用 Hash 门面上的 make 方法来哈希密码:
$user = new User;
$user->password = Hash::make('mypassword');
$user->save();另外,模型可以实现 Hashable 特性 以自动哈希属性。
该 check 方法允许您验证一个给定的纯文本字符串是否对应于一个给定的哈希值.
if (Hash::check('plain-text', $hashedPassword)) {
// The passwords match...
}needsRehash 函数允许您确定自密码散列以来,散列器使用的工作因子是否已更改:
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}你可以使用 Crypt 外观来加密一个值. 所有加密的值都使用 OpenSSL 和 AES-256-CBC 密码进行加密. 此外,所有加密的值都使用消息认证码(MAC)进行签名,以检测对加密字符串的任何修改.
例如,我们可以使用 encrypt 方法来加密一个密钥并将其存储在 数据库模型 上:
$user = new User;
$user->secret = Crypt::encrypt('shhh no telling');
$user->save();当然,您可以使用 Crypt facade 上的 decrypt 方法解密值。如果该值无法正确解密,例如 MAC 无效时,将抛出 Illuminate\Contracts\Encryption\DecryptException 异常:
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = Crypt::decrypt($encryptedValue);
}
catch (DecryptException $ex) {
//
}或者,模型可以实现该 可加密的特性 以自动加密和解密属性。