HashID 编解码
将整数编码为短字符串 HashID,或将 HashID 解码回原始整数,支持自定义盐值、最小长度和字母表
相同整数 + 不同盐值 = 不同 HashID
0(不填充)32
用于生成 HashID 的字符集(至少16个不重复字符)
关于 HashID
- HashID 是一种将整数编码为短字符串的算法,常用于隐藏数据库自增 ID,避免暴露业务数据量
- 与加密不同,HashID 是可逆的编码,知道盐值即可解码,不适合用于安全场景
- 支持编码单个整数或整数数组,同一组整数 + 相同盐值始终生成相同的 HashID
操作说明
- 选择「编码」模式,输入整数(支持多个,逗号或换行分隔),点击「转换」生成 HashID
- 选择「解码」模式,输入 HashID 字符串(每行一个),点击「转换」还原整数
- 可自定义盐值、最小长度和字母表,相同配置才能正确解码
- 支持 Ctrl+Enter 快捷键触发转换
注意事项
- HashID 不是加密算法,知道盐值即可解码,请勿用于密码或敏感数据保护
- 字母表至少需要 16 个不重复字符,否则无法正常工作
- 解码时必须使用与编码时完全相同的盐值和字母表,否则结果为空
- 所有处理均在浏览器本地完成,不会上传任何数据
HashID 知识详解
HashID 是什么?
HashID(Hashids)是由 Ivan Akimov 创建的开源算法,将正整数编码为短字符串。核心特性:
- 可逆:知道盐值即可解码,不是单向哈希
- 唯一:相同输入 + 相同盐值 = 相同输出
- URL 安全:默认字母表不含特殊字符
- 支持数组:可将多个整数编码为一个 HashID
典型应用场景
| 场景 | 原始 ID | HashID | 优势 |
|---|---|---|---|
| 用户 URL | /user/12345 |
/user/NkK9 |
隐藏用户数量 |
| 订单号 | ORDER-1001 |
ORDER-Mj3 |
防止竞争对手估算订单量 |
| 短链接 | id=9999 |
/s/xyz8 |
短小美观 |
| 邀请码 | [1, 2, 3] |
laHquq |
编码多个参数 |
安全性说明
⚠️ HashID 不是加密算法,不应用于安全敏感场景
- HashID 的目的是混淆,而非保密
- 如果攻击者知道盐值,可以轻松解码所有 HashID
- 盐值应保存在服务端,不应暴露给客户端
- 需要真正加密时,请使用 AES、RSA 等加密算法
代码示例
JavaScript / Node.js
import Hashids from 'hashids';
const hashids = new Hashids('my salt', 8);
// 编码
const id = hashids.encode(1, 2, 3); // 'laHquq'
// 解码
const nums = hashids.decode('laHquq'); // [1, 2, 3]
const hashids = new Hashids('my salt', 8);
// 编码
const id = hashids.encode(1, 2, 3); // 'laHquq'
// 解码
const nums = hashids.decode('laHquq'); // [1, 2, 3]
C# (.NET)
var hashids = new Hashids("my salt", 8);
string id = hashids.Encode(1, 2, 3);
int[] nums = hashids.Decode(id);
string id = hashids.Encode(1, 2, 3);
int[] nums = hashids.Decode(id);