2015-06-22 8 views
2

我使用以下命令對進行加密,然後將密碼存儲在MySQL db中。PHP/MySQL:爲加密密碼選擇哪種數據類型(bcrypt,最多100個字符)

目前我已將密碼限制爲最大長度。 20個字符,因爲我不確定是否由於加密輸出,更長的密碼可能會導致問題。

在PHP中我使用的加密如下:

$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT); 

密碼是在客戶端trimmend傳遞之前。

有人能告訴我,如果CHAR(60)足以覆蓋與最多100個字符(數字,大寫和小寫字母,特殊字符)的密碼?

此外,是否有一個共同的最大。應該爲密碼設置字符限制 - 而不會增加漏洞? 我瞭解到有些人一定想使用較長的密碼,如短語等。

+2

本手冊的有答案http://php.net/manual/en/function.password-hash.php –

+0

感謝。所以基於此,我應該將其更改爲CHAR(255),然後可以允許密碼最多爲100個字符,這是正確的嗎? – TaneMahuta

+2

不,它不是.... php文件說使用varchar(255),你不想用char這樣的東西 –

回答

2

正如名稱所示,函數password_hash()將計算密碼的哈希值。無論密碼的長度如何,這個散列的長度都是相同的。所以沒有理由限制密碼的長度,接受任何長度的密碼,只需要最小長度。

目前該函數會計算一個BCrypt哈希,其輸出總是60個字符。因此,數據庫字段char(60)將足以存儲散列值。

儘管如此,使用的哈希算法可能會改變,以應對未來的威脅。這就是爲什麼手冊建議使用參數PASSWORD_DEFAULT和字段varchar(255)。這爲該功能提供了必要的空間以保證未來的發展。

$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);