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