2012-01-16 174 views
4

我正在写一个PHP脚本,我想知道如果我应该允许用户密码空格。我使用sha1()来散列密码,并且它似乎对包含空格的密码很好。不过,我注意到很多主要网站都不允许密码包含空格。是否有这样的理由,还是允许它们?允许在密码空间

+0

没有实际的安全理由来否认空格。这种限制是几十年前写得不好的系统的一个毫无意义的遗产,并且只是阻止人们使用更令人难忘的密码短语。让人们使用任何他们想要的。 – 2012-01-16 01:23:51

+0

哪些“主要网站”不允许密码包含空格?我已经看到这样的用户名限制,但从来没有密码... – 2012-01-16 01:25:07

+3

你应该允许空格。你还应该允许 - *鼓励真的* - 使用通行短语。您可以享受[this xkcd](http://xkcd.com/936/)。哦,请使用bcrypt或scrypt,或者更好的是,可以使用现有的库来完成所有功能。 (普通的sha1不足以输入密码,太容易暴力了。) – 2012-01-16 01:25:56

回答

12

你应该绝对允许在密码空格。许多人更喜欢使用通过短语,并通过禁止空间,你正在努力为他们的生活没有任何好处。

除了允许使用密码而不是密码之外,还应该鼓励他们,因为他们是more secure(好吧,我承认我写这个的一半原因是放在xkcd链接中)。

+1

+1此外,空格被视为特殊字符,这被认为是更好的安全性。 – 2012-01-16 01:25:05

+4

特殊字符对常规字符没有真正的好处。鼓励他们是因为他们扩大了字符空间(可能性/组合的数量)。 – MrGlass 2012-01-16 01:30:50

4

有没有很好的理由有史以来限制用户可以在他们的密码中使用的字符。永远。

1

我不明白为什么会有。如果它没有给你的实现带来任何问题(它不应该),它所要做的就是将可用的字符空间扩大1,并且使得破解更加困难。

1

只要您的哈希机制能够每次对它们进行相同的哈希操作,限制密码中允许的字符就毫无意义。例如,如果您打算从使用不同字符编码的系统进行密码检查,例如在PHP中对密码进行哈希处理并尝试使用Java进行检查,则可能不希望对多字节字符进行哈希处理。