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

Tan*_*uta 3 php mysql passwords hash

在将密码存储在MySQL数据库中之前,我使用以下方法对密码进行加密

目前,我已将密码限制为最大长度。20个字符,因为我不确定较长的密码是否会由于加密输出而在此处引起问题。

在PHP中,我使用以下代码进行加密:

$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)

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

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

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

mar*_*kli 5

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

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

但是,使用的哈希算法可以在将来更改,以应对将来的威胁。因此,手册建议使用参数PASSWORD_DEFAULT和字段varchar(255)。这为功能提供了必要的空间,以适应未来的发展。

$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)