字节证据工作台 · 工具不是魔法
摘要是否一致,先从输入字节查起。
Hash 处理的是字节。校验值不一致时,应先确认双方使用了相同的字符编码、Unicode 规范化、换行符和文件内容,再检查算法与 hex / Base64 输出表示。
字符先编码为字节
所选文件的 ArrayBuffer 直接传给本地 Worker
看起来相同的文本,可能采用不同 Unicode 规范化形式或带有不可见的尾随字节。输入清单不仅记录结果,也要记录它来自文本还是文件。
两种工具
普通摘要与 HMAC 回答的是不同问题。
普通 HASH
消息 → H(message)任何拿到消息的人都能复算。
用于完整性比对
带密钥的 HMAC
密钥 + 消息 → HMAC只有共享密钥的参与方才能复算。
完整性 + 共享密钥认证
算法状态架
输出更长,不等于安全属性就更完整。
SHA-256256 bit当前推荐通用完整性校验与内容寻址
SHA-384384 bit当前推荐兼容特定协议或安全策略
SHA-512512 bit当前推荐需要较宽 SHA-2 输出的场景
SHA-1160 bit旧算法仅作兼容校验;存在碰撞弱点
MD5128 bit旧算法仅作旧校验值兼容;存在碰撞弱点
不一致排查
肉眼相同的输入,可能不是同一份字节证据。
换行符
LF 0ACRLF 0D 0AUnicode
é · U+00E9e + ◌́ · U+0065 U+0301文本编码
UTF-8UTF-16LE输出表示
小写 hex带 padding 的 Base64文件处理
原始字节文本模式转换摘要长度
完整值截断前缀校验回执
规范化表示后,仍需比对完整摘要。
匹配只能说明本地字节与所填预期值一致。发布者身份是否可信,还取决于预期值从哪里取得、是否经过可信渠道认证。