在php中生成非随机密码的最安全方法是什么?


What is the safest method in php to generate NOT random password in php?

我做了一些研究,所有生成密码的方法似乎都包含一个'随机'部分。如果我想生成一个密码,尽可能安全,没有随机部分,以便能够有一个脚本生成它(一次又一次地产生相同的结果)怎么办?

假设在我的网站,我有一个用户的用户名'foo_bar'。比如

   hash('sha512', 'foo_bar'.'some_secret_word') 

生成他的密码可能是最好的方法?

编辑:我需要我的脚本生成相同的密码给它输入相同的字符串,所以一切涉及rand()不是一个答案

编辑:让我们详细说明这个问题。我有一个长列表的用户数据(用户名,电子邮件,地址等)在csv格式。我必须将它们导入我的网站(建立在CMS上)。我知道如何导入它们,生成用户,但是我需要通过我自己的php生成他们的密码,以便在任何时候看到他们,因为我需要在不同的时间向用户打印凭据。使用任何随机元素生成密码意味着不能在任何时候拥有和打印凭据。由于某些原因,我不能简单地一次性生成它们,然后将它们存储在某个地方,以后再检查。显然,我无法使用password='username_astring'这样的简单方法生成密码,因为任何查看自己密码的用户都会知道其他人的密码,所以我认为使用这种方法是一个好方法,但要加密字符串。然而,这个想法对我来说似乎不太"干净",我在猜测是否有一个更标准和干净的解决方案。

你指的是加盐密码的做法。您的想法是正确的,在将散列算法应用于用户密码之前,将向其添加一个单独的字符串。它的目的是防止所谓的彩虹表,攻击者会预先计算普通密码的哈希值,并将其与他们"获得"的数据库转储中的哈希密码进行比较。

在这种情况下,最佳实践是不要使用自己的哈希算法。有大量的第三方哈希库已经被尝试和测试,并被证明是安全的。

否则,最佳实践是为每个不同的密码(包括密码更改)生成不同的salt,然后必须将其与密码一起存储,以便检查身份验证尝试。