PHP / MySQL:为加密密码选择哪种数据类型(bcrypt,最多100个字符)

时间:2015-06-22 19:09:02

标签: php mysql hash passwords

我将以下内容用于加密密码,然后将其存储在MySQL数据库中。

目前我已将密码限制为最大长度。 20个字符,因为我不确定更长的密码是否会因加密输出而导致问题。

在PHP中,我使用以下内容进行加密:

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

密码在传递之前在客户端进行修改。

某人可以告诉我 CHAR(60) 是否足以涵盖最多100个字符的密码(数字,大写和小写字母,特殊字符) )?

另外,是否有共同的最大值。应该为密码设置的字符限制 - 不增加漏洞? 我了解到有些人肯定想使用较短的短语等较长的密码。

1 个答案:

答案 0 :(得分:4)

顾名思义,函数password_hash()将计算密码的哈希值。无论密码的长度如何,此散列的长度始终相同。因此没有理由限制密码的长度,接受任何长度的密码,只需要最小长度。

目前该函数将计算BCrypt哈希值,其输出将始终为60个字符。因此,char(60)的数据库字段足以存储哈希值。

使用的哈希算法可以在将来改变,以应对未来的威胁。这就是手册建议使用参数PASSWORD_DEFAULT和varchar(255)字段的原因。这为该功能提供了面向未来的必要空间。

$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);