2012-01-16 104 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進行檢查,則可能不希望對多字節字符進行哈希處理。