杂记 › 技术笔记 › 星号段长写死:脱敏页五套掩码固定切出 4、3、11、12 枚星号,18 位串被手机档抢走、空框回落 *

星号段长写死:脱敏页五套掩码固定切出 4、3、11、12 枚星号,18 位串被手机档抢走、空框回落 *

五套掩码的星号枚数全是写死的常数:4、3、11、12、2 枚跟输入长度无关,18 码元串被手机档先抢走、证件档空转,重叠外露的门槛实测不可达,空框回落与统计栏命中处数逐档量过。

一段文本里混着好几种号码,勾上以后各档分别怎么变

起因很具体:贴进去的文本里 11、18、16 码元三种长度的串都有,五个勾选框全亮着,输出里每档各吃掉多少格。跑法:模板 7386 字节 / 152 行、脚本块 2853 码元原样执行,五条正则与 repeat、doMask 不改写、不修 bug,DOM 只给按 id 的桩,纯 Node。数字全是字符串层实测,长度按 UTF-16 码元;样本串要么是顺序位与连续重复位拼出的虚构输入,要么是模板自带的默认样本,与任何真实号码无关,本篇只把它们当字符串做算术。

被测的是隐私信息遮掩:默认输入是模板自带的 4 行 / 108 码元样本,加载即跑一次 doMask(L150),没有按钮触发。

星号枚数是写死的常数,跟输入长度无关

五条替换式里 repeat 的上界全是字面量,调用点 6 处、常数依次 4、3、11、4、4、4(L98 / L106 / L114 / L124),IP 档(L132)不走 repeat 而是直接拼 2 枚。

档星号枚数替换式形态外露比例
手机4头 3 + 4 枚 + 尾 463.6%
邮箱3首字符 + 3 枚25.0%
证件11头 3 + 11 枚 + 尾 438.9%
卡号12三段各 4 枚加空格21.1%
IP2留前两段重拼54.5%

同一档内输入变长变短都不改这个数:卡档取 16、17、18、19 码元四档,星号恒 12、输出码元恒 19、外露数字恒 4;手机档从 11 码元加长到 30 码元,星号恒 4、命中恒 1 处;证件档只有 18 码元那档命中,星号恒 11。「比模板长」不是降级而是不接手——纯数字串 20..40 码元在五档全勾下 0 命中、外露 100.0%。

repeat 常数与输入长度 手机 4 枚 输入 11 / 12 / 20 码元 星号恒 4 卡号 12 枚 输入 16 / 17 / 18 / 19 码元 输出恒 19 证件 11 枚 只有 18 码元那档命中 命中 1 次 邮箱 3 枚 · IP 2 枚 IP 默认未勾 段长跟输入长度无关,也跟命中串长度无关。

图 1:五档常数的恒定读数。

输入比模板短,既不落进掩码也不落进重叠

重叠那一档:head 取 3、tail 取 4,命中串短于 3+4 = 7 码元时两段共享同一格、明文重复外露(假想表 n=6 得 123****3456,index 2 出现两次)。但三条用 slice 的正则拿不到这么短的命中串:手机的定长账是 1 枚字面加 1 枚字符类加 9 枚 = 11,证件 17+1 = 18,卡取 16..19,最小命中长度 11、18、16 分别比门槛 7 多 4、11、9 码元;400 条定向语料裸跑,「小于 7 的命中数」五档全为 0。另两档不切片,重叠外露在本页不可达。

外露来自不锚定:18 码元串被手机档抢走

证件、卡、IP 三条带 \b,手机与邮箱不带,差别就在第 2 行:实测输出 身份证号:110101199****11234,星号 4 枚、14 个数字码元留着,占 18 码元的 77.8%——手机档没有边界锚,先在证件串的 18 码元内部命中一次,把证件档要读的输入换掉;单独关掉手机档才得到 110***********1234、星号 11、外露 7。统计栏数字列 4、2、1、1 里没有「身份证」行:证件档在自家首屏完全空转,「关掉 idcard」与五档全勾的输出首个差异位置是 -1,32 种勾选组合只产出 24 种串,8 组冗余全来自这一档。

五条 replace 顺序固定,残段决定第二档能不能接手

链路是手机 → 邮箱 → 证件 → 卡 → IP,前一条的输出就是后一条的输入。手机档切完后尾 4 码元与其后数字相连,卡档接手看「4 加残留」是否落在 16..19。输入 24 码元的 138123456781234567890123 → 手机先切、卡档在残段命中长度 17 → 星号 16;加长到 27 码元时残段 20 大于 19,卡档 0 命中。邮箱档同理:local 混进一枚 11 码元数字段(整行 31 码元)→ 手机先切、邮箱再接手 → 星号 7,比只勾邮箱档差 15 码元。

五条 replace 的消费顺序 手机 → 邮箱 → 证件 → 卡 → IP 24 码元 手机先切,卡档在残段命中 长度 17,星号 16 27 码元 残段 20 大于 19 卡档 0 命中 31 码元 邮箱在残段接手 星号 7 接手窗口:4 加残留落在 16..19。

图 2:串接顺序与残段接手窗口。

遮掩字符框的三处口径

框上写着 value="*" 与 maxlength="1"(L35),取值句子(L84)的回落只对空串生效。把框清空,13812345678 仍出 138****5678、4 枚星号,与默认逐字相同;打一个空格则空格 truthy、不回落,11 码元里 4 码元是空格、星号 0。桩里强写两字符,repeat 产出 8 码元、手机档输出 15 码元。连打两个字符会不会被截成一格、预设按钮写入是否同受约束,属浏览器控件层,本批纯 Node 没起 headless Chrome,标未实测。

统计栏数的是命中处数

五个计数器只在各 replace 回调里自增,总数取五数之和(L139),命中 0 的档整行不渲染。1 行 3 个手机号是 3 处 / 12 枚星号、仍 1 行;100 行重复样本给 200 处而行数只有 100;空输入走提前返回,统计栏写成 0 码元而不是「0 处」。把结果粘回去再遮一轮:第 1 轮从 108 变 104 码元,第 2 轮输出与输入逐字相等、星号仍 23。

IP 档默认没勾,文案却把它和前四档并列

逐字读属性:前四个 input 带 checked(L18 / L21 / L24 / L27),mask-ip(L30)没有——默认首屏第 4 行与输入逐字相等、星号 0;勾上以后 13 码元变 11 码元、2 枚星号,星号账从 23 涨到 25。页面配置 16 项里可判 15 项:[一致] 8、[部分一致] 5、[冲突] 2,一处在「中间 11 位遮掩」那句整页断言(首屏证件档命中 0 次,差 7 枚星号),一处在把默认未勾的 IP 写成自动识别。

命中这件事,两个页各有一把尺

本页只替换不挑选,判据是五条正则的命中处数;按类型挑字段是文本信息提取那一页的活,两页口径不是同一把尺。内置类型在提取侧撞上限那件事,站内旧文量过,不复述它的数字。

常见问题

Q:星号枚数会随输入长度变吗?

不会——卡档输入从 16 到 19 码元,星号恒 12、输出码元恒 19;手机档从 11 到 30 码元,星号恒 4。

Q:短于 7 码元的串会把明文重复露出来吗?

算术上会,n=6 时 head 与 tail 共享 index 2 那一枚;但三条切片的正则最小命中 11、18、16 够不到门槛,实测重叠在本页不可达。

Q:勾了证件档,统计里为什么没有身份证那一行?

18 码元串被排在前面的手机档改写,证件档拿到已含遮掩字符的中间串,命中 0 次的档整行不渲染。

📎 相关文章

锁是单向的、百分比是两把尺:pct 50 得 619×430,PNG 四档 quality 全 6971 B 2026-11-13 相对时间的「一个月」写死 30 天:时间戳页六档除数、13 位毫秒输入与 UTC+8/UTC-5 两档截断实测 2026-11-13 两 tab 各算一遍同一个 C(n,r):n=20 写满 40 个因子、n=21 一格不剩,300 位大数与 r=0 的两种读法 2026-11-13 8 个元素算得出 40320 条却只列 5000 行:排列计算器的两道互不相干的上限、重复元素按 3! 计数与 n≤20 的过程断点 2026-11-12 投放链接的装配顺序与大小写折叠:UTM 生成器六态标注、两道硬上限与五栏各用一把尺实测 2026-11-12