What is the safest method in php to generate NOT random password in php?
我做了一些研究,所有生成密码的方法似乎都包含"随机"部分。如果我想生成一个密码,尽可能安全,没有随机部分,这样就可以让一个脚本生成它(用相同的结果一次又一次)?
比如在我的网站上,我有一个用户名为"foo-bar"的用户。做一些类似的事情
1
| hash('sha512', 'foo_bar'.'some_secret_word') |
生成他的密码是最好的方法吗?
编辑:我需要我的脚本生成相同的密码,在输入相同的字符串时给出相同的密码,因此所有涉及rand()的内容都不是答案。
编辑:让我们详细说明这个问题。我有一个csv格式的用户数据(用户名、电子邮件、地址等)长列表。我必须将它们导入我的网站(建立在CMS上)。我知道如何导入它们,生成用户,但是我需要通过自己的PHP生成它们的密码,以便在任何时候看到它们,因为我需要在不同的时间将凭证打印给用户。使用任意元素生成密码意味着不能在任何时候拥有和打印凭证。由于某些原因,我不能简单地生成它们一次,将它们存储在某个地方,稍后再检查。显然,我不能用一个简单的方法生成密码,比如password='username'a string',任何一个查看自己密码的用户都会知道其他人的密码,所以我认为使用这个方法的好方法是加密字符串。然而,这个想法对我来说似乎不太"干净",我猜测是否有一个更标准、更干净的解决方案。
- 随机位(salt)是哈希安全的一部分。请使用密码API并停止尝试滚动您自己的密码工作流。
- "安全"是什么意思?
- 您试图生成密码还是生成哈希?不清楚。
- @我的意思是很难猜到斯科特。我对密码学不是很了解,我想生成一些不可猜测的密码,比如"foo-bar-u密码"。同时,我不需要足够强大的密码来保护蝙蝠洞。:)
- @Machavity密码。对不起,我不知道什么是土豆泥或盐。
- 您是询问在用户登录到您的站点时自动生成一个供用户使用,还是询问如何散列现有密码以存储在数据库中?
- 实际上,我有一长串csv格式的用户数据(用户名、电子邮件、地址等)。我必须将它们导入我的网站(建立在CMS上)。我知道如何导入它们,生成用户,但是我需要通过自己的密码生成它们,以便在任何时候看到它们,因为我需要在不同的时间将凭证打印给用户。使用任意元素生成密码意味着不能在任何时候拥有和打印凭证。由于某些原因,我不能简单地生成它们一次,将它们存储在某个地方,稍后再检查。
- 我有这个问题的答案-但不能提交,因为它关闭了。
- @如果你需要知道凭证,你不需要一个哈希算法,你需要双向加密。
- 代码中不使用'some_secret_word'的问题意味着,如果两个或多个用户使用相同的密码,那么它会生成相同的"sha256"值。人们倾向于使用"易于记忆的密码",即简单。所以,破解一个未加保护的哈希,所有使用该密码的人都可以在不做任何额外工作的情况下解密。
- 虽然我认为这个问题是有缺陷的,可能不是用户想要的——但这个问题仍然有效,并且不是"如何创建密码"的副本。它更可能是"如何加密字符串"的副本。在这种情况下,字符串将是用户名。
- 是的,对不起,我想我把所有的问题都解释得不好。更像是我需要"用盐加密字符串"。我将它用作密码的事实并不十分相关。我现在才明白这一点,理解哈希的概念。我检查一下双向加密。
- @斯科特,是的,关门了,但不是我。有人误解了这个问题,把它标为重复的…
- @萨沙格里夫斯甚至澄清,虽然,这仍然是一个复制品,只是一个不同的问题。如果你想要可逆加密,那么你需要阅读这个问题,这个问题可能是你在任何地方都能找到的最好答案。
- @我仍然认为这不是复制品。它仍然比简单的加密更复杂。加密并不能完全解决加密字符串的问题,正如您所说,它是可逆的,如果还原,可能会揭示生成所有其他用户密码背后的模式。我相信这个问题并不是微不足道的,也可能有一些不平凡的答案。
- 为什么不?这样做会引起问题吗?(假设散列的值现在将被重新散列,以作为用户密码存储在数据库中)这不是处理问题的标准方法,但是否适合解决我的问题?
你所指的是密码加盐的做法。您的想法是正确的,在将哈希算法应用于用户密码之前,会向其添加一个单独的字符串。它所要保护的是所谓的彩虹表,攻击者将预先计算常见密码的散列值,并将其与"获取"的数据库转储中散列的密码进行比较。
在这种情况下,最好的做法是不要使用自己的哈希算法。有很多第三方散列库已经过尝试和测试,并被证明是安全的。
除此之外,最佳做法是为每个不同的密码(包括密码更改)生成不同的salt,然后还必须将其与密码一起存储,以便检查身份验证尝试。
- 行动组澄清了他的问题。他想要带盐的可逆密码。关于哈希的好答案,tho
- 谢谢你每次都建议换盐:真的很珍贵!