哈希和加密

配置

当您第一次安装October时,应该为您生成一个随机密钥。 您可以通过检查config/app.php配置文件的key选项来确认这一点。 如果密钥保持不变,则应将其设置为32个字符的随机字符串。 如果未正确设置此值,则所有加密值都将不安全。

哈希

Hashfacade提供安全的Bcrypt哈希来存储用户密码。 Bcrypt是哈希密码的绝佳选择,因为它的“工作因子”是可调整的,这意味着随着硬件功率的增加,生成哈希所需的时间也会增加。

您可以通过调用Hashfacade上的make方法来哈希密码:

  1. $user = new User;
  2. $user->password = Hash::make('mypassword');
  3. $user->save();

或者,模型可以实现Hashable trait 来自动哈希属性。

根据哈希验证密码

check方法允许您验证给定的纯文本字符串是否对应于给定的哈希。

  1. if (Hash::check('plain-text', $hashedPassword)) {
  2. // The passwords match...
  3. }

检查是否需要重新验证密码

needsRehash函数允许您确定自密码被哈希以来哈希使用的工作因子是否已更改:

  1. if (Hash::needsRehash($hashed)) {
  2. $hashed = Hash::make('plain-text');
  3. }

加密

您可以使用Cryptfacade加密值。 所有加密值都使用OpenSSL和AES-256-CBC密码加密。 此外,所有加密值都使用消息验证代码(MAC)进行签名,以检测对加密字符串的任何修改。

例如,我们可以使用encrypt方法加密并将其存储在数据库模型中:

  1. $user = new User;
  2. $user->secret = Crypt::encrypt('shhh no telling');
  3. $user->save();

解密一个值

当然,您可以使用Cryptfacade上的decrypt方法解密值。 如果无法正确解密该值,例如当MAC无效时,将抛出Illuminate\Contracts\Encryption\DecryptException 异常:

  1. use Illuminate\Contracts\Encryption\DecryptException;
  2. try {
  3. $decrypted = Crypt::decrypt($encryptedValue);
  4. }
  5. catch (DecryptException $ex) {
  6. //
  7. }