安全散列方法

时间:2013-05-14 06:22:06

标签: php string-hashing

在MVC风格的网络应用程序中,设置全局可用的散列方法的最佳/最安全的方法是什么?

我刚刚在我的核心控制器中执行此操作,该控制器由我的脚手架的其余部分扩展:

class Core{

    protected function salt($string=null){
        $salt = 'dsjflk32osdjshewy8327rtewyrkjfdhdsgnmbcxvsgfyew3287';
        $this->data = md5($salt.$string);

        return $this->data;
    }
} 

这是一种好习惯吗,还是我应该做些不同的事情?

5 个答案:

答案 0 :(得分:2)

这取决于你想要哈希的内容。如果它只是为较大/分组数据集创建唯一标识符,那么您可以只使用MD5。当然不需要使用盐,但它也不能伤害你。

如果要将其用于密码,请不要使用针对速度优化的散列函数,因为它不是真正的安全性。对于密码,我建议使用Bcrypt,this question有很多关于你应该使用它的信息。

如果您需要散列函数来取消参数,那么它们不能被改变,md5散列就足够了。由于您需要在某处存储哈希值与实际值之间的链接,因此他们可以尝试强制使用md5来更改参数,但它们仍然只能输入您允许的值并且在链接表中有。

答案 1 :(得分:1)

看看openwalls phpass

http://www.openwall.com/phpass/

它用于很多开源php项目

答案 2 :(得分:0)

这是另一种解决方案,

      $this->data = crypt($salt.$string);   

答案 3 :(得分:0)

在哈希中使用常量盐并不是一个好主意。每个哈希使用不同的盐是明智的。为此你可以:

  1. 生成随机盐并将其保存在db

  2. 中的哈希旁边
  3. (更好)密码始终与数据库中的某个实体相关联,因此您可以选择一些不会被更改的属性(其ID或创建日期)作为盐的不同部分。

答案 4 :(得分:0)

使用SHA512进行加密,MD5根本不安全。 我使用的方法来加密:

$salt= hash("SHA512", $myconstantvar);
$peper= hash("SHA512", $username);
$pass= hash("SHA512", mypass);

enc_pass= hash("SHA512", $salt.$pass.$peper);