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
典型应用场景
场景原始 IDHashID优势
用户 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]

C# (.NET)

var hashids = new Hashids("my salt", 8);
string id = hashids.Encode(1, 2, 3);
int[] nums = hashids.Decode(id);