Bcrypt vs Hash in laravel

时间:2015-03-06 13:34:42

标签: php laravel hash bcrypt

我想创建一个函数或类似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
}

此代码已被广泛描述。更好地使用我意味着更安全/更安全,或在那种恍惚状态。谢谢!

2 个答案:

答案 0 :(得分:10)

你的第二个选择不是bcrypt。 Laravel的Crypt课程使用AES加密 如上所述in the documentation

  

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()每次都会产生不同的哈希值。

Hashing - Laravel docs

答案 1 :(得分:1)

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

如果您需要在密钥加密后取回密钥,第二个选项会更好。