Agent Skills
返回列表
短ID混淆Sqids

短ID混淆Sqids

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/shortidsqids20260717。

技能介绍

要解决的问题

当你需要把数据库里的自增主键、订单号这类数字 ID 对外分享时,直接暴露会有两类麻烦:一是可遍历,攻击者顺着 1001 到 1002 就能拉取大量记录;二是不方便,长数字拼进链接后难以记忆和传播。你需要一种能压缩长度、带轻微混淆、还能随时还原回原始 ID 的短码方案。

技能如何工作

这个技能基于 Sqids 编码库,把非负整数 ID 转换为短字符串,核心流程只有两步:

  • 编码:调用 encodeId(n),内部执行 sqids.encode([n]),得到一个长度不低于 6 的短码。
  • 解码:调用 decodeId(code),内部执行 sqids.decode(code)[0],还原回原始数字。

它内置四条硬约束,保证行为可预期:

  • 只处理非负整数,输入为负数或非整数会直接失败。
  • minLength 建议 ≥ 6,防止短码过短导致碰撞率上升。
  • 编解码往返必须一致,decodeId(encodeId(n)) 恒等于 n。
  • 成功与失败均有明确提示,便于上层逻辑捕获异常。

适用边界与注意点

  • 不是安全方案:Sqids 提供的是轻量混淆,不是加密。短码能挡住随意扫描,但无法抵御有明确攻击目标的逆向分析,敏感场景仍需配合权限校验。
  • 仅面向数字 ID:它不接受字符串、UUID 或复合结构,如果你的 ID 是 UUID 格式,需要先映射为整数再编码。
  • 碰撞风险随 minLength 下降而上升:当你把最小长度设得过小(例如 4),高并发下出现重复短码的概率会显著增加,建议保持 minLength 在 6 以上。
  • 解码结果需二次校验:decodeId 返回的是 number | undefined,拿到 undefined 说明短码非法或已失效,调用方必须做空值判断。

使用场景

  • 团队要做短链服务,需要把数据库自增主键编码为短字符串拼进链接,并能从短链解码还原原 ID 以定位详情页。
  • 后端开发对外 JSON 接口,不想直接暴露自增主键,需要用 Sqids 把数字 ID 编成六位以上短码返回,解码时做输入校验。
  • 电商订单系统需要把长数字订单号编码成短码生成分享链接,接收方解码后与原单号比对完成合法性校验。
  • 社区平台要对帖子 ID 做轻量混淆,避免访问者按连续数字遍历内容,要求编解码往返结果完全一致。

适合人员

  • 后端开发工程师,需要在 API 响应中隐藏自增主键、防止数字 ID 被连续遍历读取。
  • 短链或短码服务的开发者,需要把长数字 ID 编码为可解码还原的短字符串用于生成分享链接。
  • 全栈工程师,正在设计对外资源标识,希望短码长度可控且编解码往返行为稳定一致。
  • 内容社区技术负责人,想对帖子或评论的连续数字 ID 做轻量混淆,降低被批量爬取的风险。