Bcrypt vs Hash in laravel


Bcrypt vs Hash in laravel

我想创建一个函数或类似Cron的东西,用类似密码的东西执行链接(在Laravel中)。我有两个解决方案。但是哪一个更好用:

选项1(散列):

<?php
// Page 1
$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);
// <-- Insert go to page and send GET with $key code here
// Page 2
$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);
if ($key == $pageOneKey) {
    // Execute some code
}

选项2(bcrypt):

<?php
// Page 1
$key = Crypt::encrypt(date('Y-m-d'));
// <-- Insert go to page and send GET with $key code here
// Page 2
$key = date('Y-m-d');
$pageOneKey = Crypt::decrypt($key);
if ($key == $pageOneKey) {
    // Execute some code
}

该代码已被广泛描述。"更好地使用"我指的是更安全/更安全,或者恍惚中的东西。谢谢

您的第二个选项不是bcrypt。Laravel的Crypt类使用AES加密
如文件所述:

Laravel通过Mcrypt PHP扩展提供了强大的AES加密功能。

据我所知,你不需要解密数据,也不需要反向加密。因此,您应该在第一个选项中使用类似sha256的哈希算法。然而,Laravel已经提供了一个非常好的哈希类,为什么不使用它呢。

选项3(Laravel Hash,Bcrypt)

$hash = Hash::make('secret');
$input = 'secret';
if(Hash::check($input, $hash)){
    // the input matches the secret
}

注意必须使用Hash::check()进行比较。您不能仅仅用Hash::make()创建另一个散列并对它们进行比较。生成的哈希包含一个随机组件,因此即使是相同的秘密,Hash::make()每次都会生成不同的哈希。

哈希-Laravel文档

如果您永远不需要解密密钥以供进一步使用,那么第一个选项更好。

如果你需要在加密后取回密钥,第二种选择会更好。