哈希盐腌

时间:2012-08-26 12:09:23

标签: php security encryption hash sha

对不起,如果这可能是一个愚蠢的问题,我会为我的网站尝试sha + salt。想知道如何随机化我的盐。注册后,所有这些都将被散列到数据库中。还需要我为用户验证删除sha和salt。如果有人指出我正确的检测或一篇好文章会很好。谢谢我也是网站安全人员的新手我还在研究我将用于我的网站的安全实现,这些是我将要做的。

  1. 密码哈希
  2. 反SQL注入
  3. 隐藏网址中的值
  4. 想了解更多应该添加到我的安全性中的内容。我正在将学校管理系统作为一个项目。

    到目前为止,我正在调查。反暴力和我的教授给了我一个关于HTTPS的提示。

    如果密码是sha + salt加密,我将如何验证登录。

3 个答案:

答案 0 :(得分:2)

由于这是一个非常大的问题,我可能更容易引导您使用一些有用的资源,而不是试图自己解释它。

介绍网络加密A List Apart wrote a nice article。它没有非常讨论实现,但提供了一个很好的概述。

有关安全漏洞列表以及如何对抗它们,请参阅OWASP Top Ten Project

这里是PHP Security的指南,非常全面。

最后,有关创建登录系统的更多信息,请参阅this question

我建议您搜索Stack Overflow,因为可能会有一些很好的答案。

答案 1 :(得分:1)

作为salt只是将一个随机字符串添加到要编码的字符串的哈希值中,有足够的方法来生成它[例如this on SO]。

您不需要也不能解密任何sha结果,因为sha [如md5]是哈希算法,而不是 crypt 功能,即它不是意味着隐藏任何东西供以后检索:这很重要,因为我不希望我注册的网站的管理员从数据库中读取我的密码。

哈希是将数据集中的元素映射到另一个中的较短元素,在[几乎全部] injective way中 - 将任意长字符串映射到固定长度键:这使您可以在哈希域实际上并不知道原始值。

hash( value1 ) = hash ( value2 ) => value1 = value2

我说几乎因为哈希算法有一些冲突[例如先前声明的例外情况,例如hash(value1) = hash(value2)并不意味着2个值相同] - 盐也有助于此。

这就是说,这就是你将密码保存到db:

的方法
  • 生成盐;
  • 盐添加到实际密码:在 pwd之前将放在中以防止dictionary attacks;
  • hash带有正确算法的连接字符串[我选择sha1只是为了示例];
  • 将字符串和salt保存到db。

在代码中:

$user -> salt = your_salt_generator();
$user -> hashedPwd = hash('sha1', $salt . $userChosenPwd);

检查$username / $password的Pwd只是:

  • 从db获取给定$username的用户;
  • 如果存在,请使用上面保存的salt和给定密码的过程,并检查它是否等于存储的哈希值。

在代码中:

hash('sha1', $user -> salt . $sentPassword) == $user -> hashedPwd;

关于在URL中隐藏值,它更像是SEO /可读性主题而不是安全性:URL应该在路由时进行[例如http://somesite.com/products/:id访问id-th产品,并且您的服务器逻辑不应该容易受到对您的网站发出的请求的影响[无论如何完全废弃我现在不能带来的情况]。< / p>


关于MySQL注入,我们从prepared statements开始PDO extension删除它们。

关于这个,有数以百万计的答案,只是环顾四周。

坚持你的工作!

答案 2 :(得分:1)

不是你问题的直接答案,而是研究phpass http://www.openwall.com/phpass/

它将为您处理盐渍,并已经过许多安全专家的审核,被认为是非常好的密码哈希工具