哈希、ID与随机数
批量准备测试 ID 和随机字符串
使用工具
测试列表界面时 1、2、3 可能够用,但邀请链接的秘密部分不能照做。需要的是不重复、难以预测还是可复现,会决定生成方式。不要把所有随机值视为同一种功能,应分开这三个目的。
生成三个 UUID,观察格式
生成数量设为 3、版本 v4。每次结果不同,不应期待固定值。常见十六进制分组为 8-4-4-4-12,含连字符共 36 字符;第三组开头 4 等位是固定版本信息,并非 128 位全是随机。
550e8400-e29b-41d4-a716-446655440000将生成值输入确认功能可检查格式和版本,但格式正确不证明对应真实用户或记录,工具不会查询数据库。格式验证与权限测试应分开,长 ID 不能代替访问控制。
v7 包含时间信息
v7 前部包含 Unix 毫秒,确认工具能读取。结构便于按时间排序,但不证明操作在该时刻完成;设备时钟、生成方式及 ID 复用都会影响含义。审计事件时间应另行记录,不只从 ID 推测。
不能一概保证同毫秒多次生成或跨设备的顺序。应按标识和存储需求选择 v4、v7,公开 v7 也会公开含时间的结构。新版本不等于更适合所有秘密令牌场景。
随机令牌先看原始字节数
32 字节以十六进制输出为 64 字符,无填充 Base64url 为 43 字符。较短不代表随机位更少,而是表示效率不同。两次生成会得到新字节,不能期待两条字符串只是同一值的不同表示,应比较长度关系。
工具使用密码学随机数,不会退回 Math.random,但不负责分发、保存或撤销。邀请和重置链接的期限、一次性使用、权限仍由应用设计;生成长随机值不等于整套链接流程安全。
可复现测试的目标不同
每次不同的数据可能掩盖界面或处理错误。需要复现时,可在假数据生成中固定列定义、数量和 Seed。这与不可预测秘密的目标相反,能由 Seed 重现的值不能拿来做密码或认证令牌。
测试随机生成器本身时,应检查数量、格式、字符集、版本和字节数,而不是固定字符串。少量样本没有碰撞不能证明永远不重复,存储端仍需唯一约束与碰撞处理。
人工输入还要考虑可读性
人工输入密码时可排除 0/O、1/l 等易混字符,并检查目标系统的长度与符号限制。要求多个字符种类时,长度也要容得下。最好在生成时指定条件,而不是事后添加可预测的固定模式。
最后明确用途:记录标识用 UUID,不可预测秘密用相应字节数的随机令牌,复现错误用带 Seed 的虚构数据,都不必复制真实个人信息。分享前区分普通标识与秘密,再决定剪贴板和屏幕共享的处理。
ID 不同不代表测试状态不同
一百个 UUID 只是不同标识符,不是一百种有意义状态。名称、状态和长度都一样时,空名、长名、同时间、同名不同 ID 等仍未测试。需要复现时可主动固定生成结果为 Fixture,而非期待随机生成器重现。
UUID 格式正确不证明记录存在,合法虚构 ID 可测不存在状态。用短序号代替实际形状可能漏掉换行和长度限制。按测试目的分别选择格式、存在性、长度、可复现性,不要混淆标识符与秘密令牌要求。
分发的 Fixture 不要混入生产用户 ID 或真实令牌。格式布局测试通常虚构值足够,复制时标注用途,避免后来误当真实凭据。工具不自动保存,需主动保留复现所需内容。随机生成、可复现数据、生产秘密是不同用途。