Laravel Hash 密码生成

按 Laravel Hash::make() 使用的 bcrypt 算法,将明文计算为 $2y$ 哈希,可被 Hash::check() 校验。适用于写入密码列、构造 seeder 或测试数据。

哈希在浏览器本地计算,明文不会上传到服务器。
1生成 Hash::make 密文

bcrypt cost(rounds)
2校验(等价于 Hash::check)

用明文对照已有哈希,等价于 Hash::check。cost 已编码在哈希中,不必再选。

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$。校验函数对这三种前缀等价。

生成结果写到哪里

  1. 输入明文,选择与项目 config/hashing.php 中 bcrypt.rounds 相同的 cost,生成哈希。
  2. 将哈希写入任意存储密码的列,或写入 seeder、工厂、测试夹具。SQL 示例:UPDATE 表名 SET password = '生成的哈希' WHERE …;
  3. 用同一明文做一次「校验」,确认 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 生成。

评论

评论会保存到服务端,用来帮我们听取用户意见,更好的改进这个工具。计算和文件仍在浏览器本地完成。不要粘贴日志、SQL、DBC、密钥或密码。