散列和加密

Configuration

当您第一次安装 Winter 时,应该已经为您生成了一个随机密钥。您可以通过检查key 你的选择config/app.php 配置文件。如果密钥保持不变,则应将其设置为 32 个字符的随机字符串。如果这个值设置不当,所有的加密值都将是不安全的。

Hashing

Hash facade 提供安全的 Bcrypt 散列来存储用户密码。 Bcrypt 是散列密码的绝佳选择,因为它的“工作因数”是可调的,这意味着生成散列所需的时间可以随着硬件功率的增加而增加。

您可以通过调用make 上的方法Hash 正面:

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

或者,模型可以实现可散列特征 自动散列属性。

根据哈希验证密码

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

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

检查密码是否需要重新哈希

needsRehash 函数允许您确定自密码被散列后散列器使用的工作因子是否发生了变化:

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

Encryption

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

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

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

解密一个值

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

use Illuminate\Contracts\Encryption\DecryptException;

try {
    $decrypted = Crypt::decrypt($encryptedValue);
}
catch (DecryptException $ex) {
    //
}
豫ICP备18041297号-2