Hashids 是将数字 ID 编码为短唯一字符串的工具,非加密方案;须用 hashids/hashids 库并严格配置 salt,encode/decode 仅支持整数数组,返回值需正确处理。

Hashids 不是加密,而是把数字 ID 编码成短、唯一、无序的字符串(比如 123 → oEj),适合用在 URL 或 API 返回中隐藏真实 ID。它不防破解,也不替代加密,别拿它当 openssl_encrypt 用。
确认 Hashids 官方库是否还在维护
目前主流且仍在更新的是 hashids/hashids(PHP 原生实现),不是已归档的 vinkla/hashids(Laravel 封装版,PHP 8+ 兼容性差)。直接装前者更稳妥:
composer require hashids/hashids
如果你用了 Laravel 并希望自动绑定服务容器,再额外加 hashids/laravel-hashids(注意:它底层仍依赖 hashids/hashids)。
实例化时必须传 salt,否则默认空字符串会暴露规律
没设 salt 的后果:所有环境生成的编码结果一致,别人用相同算法+空 salt 就能反推原始 ID。这不是 bug,是设计使然。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
立即学习“PHP免费学习笔记(深入)”;
-
$hashids = new \Hashids\Hashids();→ 危险!等价于new \Hashids\Hashids('') -
$hashids = new \Hashids\Hashids('my-app-secret-key');→ 正确,salt 应来自配置文件或环境变量 - 如果需要不同长度输出,可加第二个参数:
new \Hashids\Hashids('salt', 10)(最小长度 10)
encode() 和 decode() 的参数类型容易出错
encode() 只接受整数数组,传字符串或浮点数会静默失败(返回空字符串);decode() 返回整数数组,哪怕只 encode 了一个数。
-
$hashids->encode([123]);→ ✅ 返回'nO' -
$hashids->encode(123);→ ❌ 返回空字符串(不是报错) -
$hashids->decode('nO');→ 返回[123],不是123,记得取[0] -
$hashids->decode('invalid');→ 返回空数组[],需判空再用
真正麻烦的不是安装,是 salt 管理和 decode 后的类型处理——很多人卡在解码后直接当 int 用,却忘了它永远返回数组。


















