我将以下内容用于加密密码,然后将其存储在MySQL数据库中。
目前我已将密码限制为最大长度。 20个字符,因为我不确定更长的密码是否会因加密输出而导致问题。
在PHP中,我使用以下内容进行加密:
$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT);
密码在传递之前在客户端进行修改。
某人可以告诉我 CHAR(60)
是否足以涵盖最多100个字符的密码(数字,大写和小写字母,特殊字符) )?
另外,是否有共同的最大值。应该为密码设置的字符限制 - 不增加漏洞? 我了解到有些人肯定想使用较短的短语等较长的密码。
答案 0 :(得分:4)
顾名思义,函数password_hash()将计算密码的哈希值。无论密码的长度如何,此散列的长度始终相同。因此没有理由限制密码的长度,接受任何长度的密码,只需要最小长度。
目前该函数将计算BCrypt哈希值,其输出将始终为60个字符。因此,char(60)
的数据库字段足以存储哈希值。
使用的哈希算法可以在将来改变,以应对未来的威胁。这就是手册建议使用参数PASSWORD_DEFAULT和varchar(255)
字段的原因。这为该功能提供了面向未来的必要空间。
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);