这个安全吗,用于哈希?

3
hash('sha512', $_POST['password'] . time()) 

我听到了很多关于这个和那个的事情,但无法得出结论...


1
除非您告诉我们如何使用计算出的哈希值,否则谈论安全性是不现实的。 - Jon
我正在wamp上开发一个简单的登录/注册项目,用户登录时使用的是密码,我正在使用时间戳进行加密处理。 - carlgcoder
3个回答

5
我建议在创建和哈希密码时添加一个salt,除此之外 - 是的。

1
盐值是 time(),它被存储在数据库中作为用户加入网站的时间,因此对于每个用户来说都是独立的。 - carlgcoder
2
你如何检查密码是否匹配?你也将那个时间存储在某个地方了吗? - Wesley van Opdorp
是的,我正在使用数据库中存储的时间来计算账户的年龄以及用户登录。 - carlgcoder

4

您正在使用time()作为。这样做没问题,但是不要忘记存储它(否则,如何检查给定密码与盐连接后是否与存储的哈希匹配呢?)。sha512是一种很好的哈希算法选择。我建议使用它。

$salt = uniqid('carlgcoder_') . microtime(true);
$hash = hash('sha512', $salt . $_POST['password']);

这是一个静态盐和一个随机盐一起使用吗?我对此感到疑惑,这样做会有好处吗? - carlgcoder
好的,谢谢你的帮助。我将坚持我原来的方式,并添加一个静态盐……静态盐更好存储为全局变量还是像你的示例一样在哈希本身中? - carlgcoder
@carlgcoder 这个盐包含一个静态部分和一个变量部分。(时间不是随机的)。动态部分使每个盐都独一无二 - 如果两个用户的盐相同,攻击者可以在一个运行中找到两个密码。此外,它还包含一个(不太重要的)静态组件,以确保假设攻击者为 microtimeuniqid 的所有可能值创建表,仍然必须自定义他的表才能适用于您的项目。 - phihag
@carlgcoder 静态部分并不是那么重要。我建议只需在其中放置一个常量字符串,以避免更有可能的情况,即某种配置错误会破坏您的哈希处理。 - phihag
好的,谢谢,现在我明白为什么同时使用静态和变量盐对于加密很有好处了。非常感谢Phihag,祝愉快编码 :) - carlgcoder

0
使用盐。示例:
<?php
    $passwordWasSavedInDB = md5($_POST['password']."_paranoia_")

他正在使用一种盐,比你提出的常量字符串要好得多。另外,为什么你会更喜欢MD5而不是SHA512呢? - phihag
永远不要使用静态盐 - 使用从用户的其他信息创建的内容。 - ty812
如果这个哈希值不用于保存在数据库中,而只是令牌式的身份验证,时间和随机哈希是很好的选择。但是,为了保存在数据库中,保存带有时间戳的哈希是大错特错的。 - TROODON
@carlgcoder,在你的盐中加入一个特定的静态组件是个好主意,比如你的网站名称等。这样,即使有人为所有常见的盐创建表格,他们仍然必须为你自定义他们的表格。每个条目的盐也应该是唯一的(不一定是随机的)。 - phihag
好的,谢谢你的帮助,我将坚持我原来的想法,并添加一个静态盐...静态盐最好存储为全局变量还是像你的示例一样在哈希本身中? - carlgcoder
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接