Laravel 的密码哈希是什么?
Laravel 的 Hash::make($plain) 默认调用 PHP password_hash(),算法为 bcrypt(Blowfish)。结果是一串约 60 字符的文本,形如 $2y$12$…。校验时 Hash::check($plain, $hash) 使用 password_verify(),只比较摘要,不保存明文。
本工具在浏览器中用同一套 bcrypt 计算,并把 JS 库常见的 $2a$ / $2b$ 前缀改成 PHP / Laravel 使用的 $2y$。校验函数对这三种前缀等价。
生成结果写到哪里
- 输入明文,选择与项目
config/hashing.php中bcrypt.rounds相同的 cost,生成哈希。 - 将哈希写入任意存储密码的列,或写入 seeder、工厂、测试夹具。SQL 示例:
UPDATE 表名 SET password = '生成的哈希' WHERE …; - 用同一明文做一次「校验」,确认
Hash::check会返回 true。
命令行等价操作为 php artisan tinker 中执行 Hash::make('明文')。
cost(rounds)
bcrypt 的 cost 表示 2cost 次迭代,写在哈希第 2、3 段($2y$10$ 或 $2y$12$)。Laravel 8–10 常见默认值为 10;Laravel 11 起 BCRYPT_ROUNDS 多为 12。生成时应对齐项目配置;校验时只看哈希本身,与当前下拉框无关。
bcrypt 的 72 字节限制
bcrypt 只使用密码的前 72 字节。更长的明文会被截断,前 72 字节相同的两个字符串会得到可互相通过校验的哈希。Laravel 默认驱动下同样受此限制。
若项目改用了 Argon2
HASH_DRIVER=argon2 或 argon2id 时,Hash::make 不再生成 $2y$ 串,而是 Argon2 格式。本工具当前实现 bcrypt(Laravel 默认)。Argon2 项目请用 Hash::make 或 php artisan tinker 生成。