-2

在 MVC 样式的 Web 应用程序中,设置全局可用的散列方法的最佳/最安全的方法是什么?

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

class Core{

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

        return $this->data;
    }
} 

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

4

5 回答 5

2

这取决于您要散列的内容。如果只是为更大/分组的数据集创建唯一标识符,那么您可以只使用 MD5。那时真的不需要使用盐,但它也不会伤害你。

如果您想将其用于密码,请不要使用针对速度进行优化的散列函数,因为它并不安全。对于密码,我推荐 Bcrypt,这个问题有很多关于为什么你应该使用它的信息。

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

于 2013-05-14T06:44:16.620 回答
1

看看 openwalls phpass

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

它在很多开源 php 项目中使用

于 2013-05-14T06:25:21.443 回答
0

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

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

enc_pass= hash("SHA512", $salt.$pass.$peper);
于 2013-05-14T12:43:58.247 回答
0

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

  1. 生成随机盐并将其保存在 db 中的哈希旁边

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

于 2013-05-14T06:52:57.163 回答
0

这是一个替代解决方案,

      $this->data = crypt($salt.$string);   
于 2013-05-14T06:29:23.160 回答