PHP/MySQL : What data type to chose for encrypted passwords (bcrypt, 最大。 100 个字符)

标签 php mysql hash passwords

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

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

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

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

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

谁能告诉我 CHAR(60) 是否足以覆盖最多 100 个字符(数字、大写和小写字母,特殊字符)?

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

最佳答案

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

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

不过,所使用的哈希算法在未来可能会发生变化,以应对 future 的威胁。这就是手册建议使用参数 PASSWORD_DEFAULT 和 varchar(255) 字段的原因。这为函数提供了面向 future 的必要空间。

$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);

关于PHP/MySQL : What data type to chose for encrypted passwords (bcrypt, 最大。 100 个字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987914/

相关文章:

java - Git 如何如此快速地计算 SHA 哈希值?

Ruby:匹配散列中的键以返回相应的键+值

c# - 在 facebook ads api 中获取图像的哈希码

php - 使用 php 搜索具有多个字段的整个数据库表

php - mysql PHP 查询数组

php - 使用两个变量在 Mysqli 中准备语句

javascript - 使用 jQuery 在特定点加载页面(没有动画!)

php - 如何根据从数据库填充的下拉框中的值获取文本字段中的数据?

php - 我应该依赖 PHP 代码中的 MySQL 错误吗?

python - python mysql where子句中的错误