在MVC风格的网络应用程序中,设置全局可用的散列方法的最佳/最安全的方法是什么?
我刚刚在我的核心控制器中执行此操作,该控制器由我的脚手架的其余部分扩展:
class Core{
protected function salt($string=null){
$salt = 'dsjflk32osdjshewy8327rtewyrkjfdhdsgnmbcxvsgfyew3287';
$this->data = md5($salt.$string);
return $this->data;
}
}
这是一种好习惯吗,还是我应该做些不同的事情?
答案 0 :(得分:2)
这取决于你想要哈希的内容。如果它只是为较大/分组数据集创建唯一标识符,那么您可以只使用MD5。当然不需要使用盐,但它也不能伤害你。
如果要将其用于密码,请不要使用针对速度优化的散列函数,因为它不是真正的安全性。对于密码,我建议使用Bcrypt,this question有很多关于你应该使用它的信息。
如果您需要散列函数来取消参数,那么它们不能被改变,md5散列就足够了。由于您需要在某处存储哈希值与实际值之间的链接,因此他们可以尝试强制使用md5来更改参数,但它们仍然只能输入您允许的值并且在链接表中有。
答案 1 :(得分:1)
答案 2 :(得分:0)
这是另一种解决方案,
$this->data = crypt($salt.$string);
答案 3 :(得分:0)
在哈希中使用常量盐并不是一个好主意。每个哈希使用不同的盐是明智的。为此你可以:
生成随机盐并将其保存在db
(更好)密码始终与数据库中的某个实体相关联,因此您可以选择一些不会被更改的属性(其ID或创建日期)作为盐的不同部分。
答案 4 :(得分:0)
使用SHA512进行加密,MD5根本不安全。 我使用的方法来加密:
$salt= hash("SHA512", $myconstantvar);
$peper= hash("SHA512", $username);
$pass= hash("SHA512", mypass);
enc_pass= hash("SHA512", $salt.$pass.$peper);