免费工具 IP 脱敏演示:截断、加盐哈希和每日换盐
注重隐私的统计不需要把访客 IP 存下来,但还是要用它一下:查一个大概的地区、区分不同的访客。输入一个地址,按步骤看哪几位被抹掉、哈希里放了什么,以及为什么同一个人明天在一种模式下还是同一个 ID、在另一种模式下变成新的。每一步都对照 TapCub 采集端的代码。
- IPv4 / IPv6 截断
- 加盐 HMAC-SHA-256
- 本地运行,不发请求
跟着一个 IP 走一遍采集端
选项和 TapCub 合规中心里的一样。盐和密钥是固定的演示值,结果可以复现;点「换随机盐」看看真实的随机盐会让 ID 变得多不可预测。
IPv4(203.0.113.42)、IPv6(2001:db8::1)或 IPv4 映射地址(::ffff:198.51.100.7)。方括号、端口、区域标识会像采集端一样去掉。
查地区前抹掉末尾几个字节。默认不截断。
查地区前保留前多少位。默认 128 位全保留。
平衡模式一直用同一个站点盐;严格模式每天换一个盐。
UA 会被归成「浏览器 / 系统 / 设备类型」,不含版本号。
盐按站点时区的日期算。
对比一下:它会得到同一个访客 ID 吗?
现在用的是固定的演示盐和密钥,所以这些 ID 可以复现。TapCub 里它们是随机生成的,只在服务端。
IPv4 地址
1 · 查地区(地址不落库)
查省市之前,采集端可以把末尾几个字节抹成 0。国家始终用完整地址查。每一行是查询时看到的地址。
| 设置 | 查地区用的地址 | 看起来一样的地址数 |
|---|---|---|
| 不截断 当前 | 203.0.113.42 | 1 |
| 抹掉末 1 字节 | 203.0.113.0 | 256 |
| 抹掉末 2 字节 | 203.0.0.0 | 65,536 |
按你的设置,查地区时用完整地址。只保存查出来的国家、省、市,地址本身丢掉。
2 · 访客 ID(带密钥的哈希,存在事件上)
IPv4 原样放进哈希:如果截断,同一个公司出口、同一个运营商网关后面的所有人会被并成一个访客。
3 · 同一个访客连续三天
平衡模式能跨天认出回访的访客。严格模式不能:零点一过盐就换了,昨天的 ID 和今天的连不起来。
| 日期 | 平衡模式 | 严格模式 |
|---|---|---|
| 2026-11-10 | 901d145d2e55c177b321474ce6dca0e5 | 8b474016c235240b4d45800373c27b44 |
| 2026-11-11 | 901d145d2e55c177b321474ce6dca0e5 不变 | 6777cef998cb49c957be77204bdaa969 新 ID |
| 2026-11-12 | 901d145d2e55c177b321474ce6dca0e5 不变 | d93359ba8a8bece5ac6a0ef262ca9b3e 新 ID |
4 · 独立 IP 计数(可选,默认关闭)
如果开了「独立 IP 统计」(严格模式下不能开),采集端用当天的盐对完整地址做哈希,取前 16 位放进 HyperLogLog 计数器。之后只能读出个数。
版本 v1.0更新于 更新记录
每一步防住了什么,没防住什么
截断和哈希解决的是不同的问题。
截断
抹掉 IPv4 最后 1 个字节,还剩 256 种可能;抹 2 个字节剩 65,536 种。它让查地区变粗,并不让访客变匿名——国家仍然准确,城市会变模糊。
带密钥的哈希
访客 ID 是 HMAC:需要密钥才能算的哈希。没有密钥和盐,就没法拿猜出来的地址去对——这很重要,因为 IPv4 一共只有约 43 亿个地址,普通哈希可以被穷举。
盐的寿命
盐一直不换,得到的是稳定的假名:能算新老访客,但按 GDPR 和个保法仍属于个人信息。盐每天换掉并删除,昨天的 ID 就再也对应不到任何人。
存下来的是什么
事件上只有访客 ID 和查出来的国家、省、市。地址本身从不写入;开了独立 IP 计数,也只留 HyperLogLog 的计数结构。
假名化不等于匿名化。一个几个月都不变的哈希 ID 仍然能把某个人单独区分出来,这就是严格模式和按地区规则存在的原因。
输入一个地址,每次只改一个选项
边输入边重算。
-
1
输入地址
粘贴任意 IPv4 或 IPv6 地址,或点一个示例。203.0.113.0/24、2001:db8::/32 这类文档专用地址段可以放心用。
-
2
改截断位数
切换 IPv4 字节数或 IPv6 前缀,看「查地区」那一行怎么变。访客 ID 不会变——截断只影响查地区。
-
3
切换模式
对比平衡和严格模式连续三天的 ID,再填第二个地址,看两次连接什么时候会算成同一个访客。
IP 在采集端用在哪里
四个用途,都在内存里完成,没有一个会把地址写进事件表。代码:apps/collector/src/anonymize.ts、packages/shared/src/ip-truncate.ts 和 visitor-key.ts。
- 访客 ID = HMAC-SHA-256(服务端密钥, 盐 | 站点 | IP | 浏览器),取前 32 位十六进制
- 平衡模式(默认):每个站点一个盐,每次读取顺延,最长保留 400 天;严格模式和档位 1:每天一个新的随机盐,3 天后过期
- IP 截断默认关闭;合规中心可选 IPv4 抹 1–2 字节、IPv6 保留 /64、/56、/48,也可以只对部分地区开
- Google 的说明是 GA4 不记录、不存储 IP;Universal Analytics 的 anonymize_ip 是抹掉 IPv4 最后一段、IPv6 后 80 位
| 用途 | 用了什么 | 留下什么 |
|---|---|---|
| 查地区 | 国家用完整地址;省市用截断后的地址(开了截断时) | 国家、省、市,不留地址 |
| 访客 ID | IPv4 整个、IPv6 前 64 位、不含版本号的浏览器、盐、站点 | 事件上的 32 位访客 ID |
| 独立 IP 计数(可选) | 完整地址 + 当天的盐 | HyperLogLog 计数结构,40 天 |
| 限流和封禁 | IPv4 最后一段换成 0;IPv6 前三组 | 内存库里的短期键 |
同一个地址,各种截断程度
查地区时,203.0.113.42 和 2001:db8:4a2b:7c10:a1b2:c3d4:e5f6:1 分别会变成什么。
| 设置 | 查地区看到的 | 看起来一样的地址数 |
|---|---|---|
| IPv4,不截断 | 203.0.113.42 | 1 |
| IPv4,末 1 字节 | 203.0.113.0 | 256 |
| IPv4,末 2 字节 | 203.0.0.0 | 65,536 |
| IPv6,保留 /64 | 2001:db8:4a2b:7c10:: | 2⁶⁴ ≈ 1.8 × 10¹⁹ |
| IPv6,保留 /56 | 2001:db8:4a2b:7c00:: | 2⁷² |
| IPv6,保留 /48 | 2001:db8:4a2b:: | 2⁸⁰ |
家庭宽带和手机通常会分到一个 /64 或更大的 IPv6 前缀,所以对 IPv6 来说,/64 更接近「一户人家」而不是「匿名」。访客 ID 用 /64,需要时查地区再截得更多。
关于 IP 脱敏的几个误区
听起来对、其实不对的四种说法。
「IP 哈希一下就匿名了」
不带密钥的 SHA-256 / MD5 IPv4,把 43 亿个地址全算一遍就能反查。只有密钥或盐保密、用完就丢,哈希才对攻击者没用。
「抹掉最后一段就匿名了」
只是把范围缩到 256 个地址。再加上时间和浏览器,仍可能指向一个人。截断算数据最小化,不算匿名化。
把 IPv6 当 IPv4 截
抹掉 IPv6 最后 8 位几乎没用:/120 仍然是一台设备。IPv6 要按前缀截,比如 /64、/48。
把所有加盐哈希都说成「每日换盐」
盐换不换是一个设置。TapCub 默认的平衡模式用一个站点盐,只有严格模式和档位 1 每天换。
采集端跑的就是这几步
这个演示用的是和产品一样的函数。你在控制台选模式和截断,采集端在每一条数据上照做。
IP 脱敏是什么?
把 IP 地址处理到不再指向某一个连接:常见做法是把末尾几位抹成 0(截断),或者换成带密钥的哈希。严格说,截断和稳定不变的哈希属于去标识化 / 假名化——和别的数据结合起来仍可能认出人来。
IP 地址算个人信息吗?
可能算。个人信息保护法把个人信息定义为与已识别或可识别的自然人有关的各种信息;欧盟法院 2016 年 Breyer 案(C-582/14)认为,网站运营者有合法途径识别背后的人时,动态 IP 也是个人数据。稳妥的做法是按个人信息对待。
IPv4、IPv6 应该抹掉几位?
IPv4 常见的是抹 1 个字节(/24)或 2 个字节(/16),2 个字节覆盖的人群大得多。IPv6 要按前缀想:/64 一般是一户人家,/48 是一个单位或一个用户的整段地址。TapCub 的选项是 1–2 字节和 /64、/56、/48。
个保法里的「去标识化」和「匿名化」有什么区别?
个人信息保护法第七十三条:去标识化是处理后在不借助额外信息时无法识别特定自然人;匿名化是处理后无法识别特定自然人且不能复原。加盐哈希的访客 ID 只要盐还在,就更接近去标识化;盐每天删除之后,前一天的 ID 才接近匿名化。
为什么 TapCub 的访客哈希里用完整的 IPv4?
如果截断,同一个公司、学校、运营商网关后面的所有人会被并成一个访客。地址只是哈希的输入;哈希带密钥,地址本身从不保存。
平衡模式和严格模式有什么区别?
平衡模式每个站点一个盐,同一网络、同一浏览器的回访者 ID 不变,新老访客能算。严格模式每天换盐,没人能被跨天追踪,也就不报告回访。
访客 ID 能反推出 IP 吗?
没有服务端密钥和盐就不能。ID 是用服务端密钥做的 HMAC-SHA-256 的前 32 位十六进制,光靠猜地址没用;严格模式下当天的盐 3 天后也会过期。