mt_rand
需要两个参数,一个是最小值,另一个是最大值。mt_rand('password', 15)
'password'
转换为整数(0
),然后返回0
到15
之间的随机数。uniqid(mt_rand('password', 15), true)
144ffb22886d58e1.82100749
接着对该字符串进行 MD5 哈希。
很明显,这段代码是毫无用处的。原始密码被转换为0
并被永久丢失,因此你只是在哈希随机数,这是毫无意义的。现在你已经得到了哈希值,就没有办法再次验证它了。由于密码被转换,所以用户输入什么都不重要。
因此,不,这段代码不安全,请勿使用。
我个人使用 phpass 库。它是安全的,而且使用起来很简单。
mt_rand()
:md5(uniqid('passwrd', true));
,这是更好的选择吗? - itsmemd5
没有被破解。目前针对 md5
的所有攻击都需要了解原始输入才能利用。但是,你是错误的,因为即使使用 sha512
,也没有安全的 hash(pass + salt)
。问题在于哈希太快。看看 这个答案。使用高成本衍生算法(如 PBKDF2 或 BCrypt)。 - ircmaxellmd5
是为了速度而构建的,而不是为了安全性。我对安全/密码学不太了解,所以我猜我不知道我在说什么。感谢提供那个链接。 - gen_Ericsha512
也是为了速度而构建的。对于数字签名(哈希的正常用例),速度至关重要。您需要能够快速安全地验证大型文档。因此,md5
被设计为既具有速度又具有安全性(因为所有哈希都是如此)。只是 md5
在正常用例下被破解了... - ircmaxell
mt_rand
的参数应该是整数而非字符串。 - gen_Eric