用 SHA-256 指纹识别被修改的照片
通俗讲解 SHA-256:一致能证明什么,不一致意味着什么,为什么通过 WhatsApp 或 Messenger 发送的照片永远对不上,以及如何比对文件。
判断一个图片文件自首次记录以来是否被改动过,最可靠的方法是比较两个文件的 SHA-256 指纹:一致说明二者逐字节相同,不一致说明文件已经改变。但“改变”不等于“伪造”:只要通过 WhatsApp 或 Messenger 发送一次照片,就足以让指纹对不上。本文用通俗的语言解释 SHA-256、它能证明什么和不能证明什么,以及一套在实际中行得通的流程。
注意:本文为一般性信息,不构成法律建议。在具体案件中如何采信证据,由相关机构决定。
通俗地说,SHA-256 是什么
可以把 SHA-256 想象成一台为文件生成指纹的机器。给它任何文件,无论是 3 MB 的照片还是 2 GB 的视频,它都会返回一串固定的 64 个字符,类似以 9f2c1a… 开头的字符串。该算法由美国 NIST 标准 FIPS 180-4 规定,从银行到软件下载,到处都在使用。
有三个特性很重要:
- 同一个文件,同一个指纹。 无论计算多少次、在哪台电脑上计算,结果都一样。
- 微小的改动,完全不同的结果。 改一个像素或删一行元数据,新指纹与旧指纹毫无相似之处。不存在“差不多一致”。
- 单向。 无法从指纹还原出照片,实际上也没有人能刻意构造出一个指纹相同的不同文件。

这意味着,在照片上传时保存 64 个字符,就足以在之后检查任何文件是否正是那张照片,而不必保存或重新发送图像本身。
一致能证明什么,不一致说明什么
| 结果 | 能证明 | 不能证明 |
|---|---|---|
| 一致 | 你手中的文件与存储了指纹的那个文件逐字节相同 | 场景是真实的,或拍摄前没有摆拍 |
| 不一致 | 文件与原始文件在某处有所不同 | 有人故意篡改了内容 |
第二行是人们最容易出错的地方。文件与原始文件不同,有很多无害的原因:
- 聊天应用会重新压缩图片。 WhatsApp、Messenger 和许多其他应用会缩小并重新压缩以“照片”形式发送的图片。
- 社交网络在你发帖时会重新压缩并删除元数据。
- 发的是截图而不是文件。
- 在相册应用中旋转、裁剪或调整亮度,哪怕只是一点点。
- 转换格式,例如 HEIC 转 JPEG,或在看图软件中“另存为”。
所以看到不一致时,正确的问题不是“这是假的吗?”,而是“这个文件经过了哪些渠道?”
为什么通过 WhatsApp 或 Messenger 发送的照片永远对不上
为了节省存储和带宽,即时通讯应用通常会重新编码 JPEG 图片:降低分辨率、加大压缩、减少元数据。肉眼看起来一样,但内部字节完全不同,SHA-256 自然也不同。
| 发送方式 | 通常保留原始文件吗? | SHA-256 比对 |
|---|---|---|
| 在聊天应用中以“照片”发送 | 不,会被重新压缩 | 几乎肯定不一致 |
| 在聊天应用中以“文件”或文档发送 | 通常会 | 通常一致 |
| 电子邮件附件 | 通常会 | 通常一致 |
| 从 Google Drive 或 OneDrive 下载的原图 | 会 | 一致 |
| 截图 | 不 | 不一致 |
印在照片上的 QR 码在压缩后通常仍能扫描,因此即使指纹比对失败,收件人也能查看拍摄时间和区域。请参阅QR 码照片验证。
一套实用的比对流程
如果你是发送照片的一方(承包商、技术人员、现场员工)
- 日常进展用聊天快速发照片没有问题。
- 对于重要的照片(验收、交接、保险理赔),另外发送原图:以文件形式、通过电子邮件或共享文件夹。
- 发送原图前不要裁剪、旋转或编辑。
- 在消息中附上 SnapID 代码,方便收件人快速查询。

如果你是接收照片的一方(业主、客户、管理者、保险公司)
- 扫描 QR 码,或根据照片上的代码打开验证页面。
- 检查拍摄时间、区域和完整性标记。
- 点击与我的文件比对,选择你收到的原图。
- 一致:文件完好。不一致:检查它是否经过了会压缩的渠道,然后索要原图。
- 如果通过不压缩的渠道发送的原图仍然不一致,请询问发送者,并仔细查看验证页面上的缩略图。
自己计算 SHA-256
用于自己核查或存档时,系统自带的工具就够了:
- Windows(命令提示符):
certutil -hashfile photo.jpg SHA256 - macOS(终端):
shasum -a 256 photo.jpg - Linux:
sha256sum photo.jpg
将输出与发送者给你的字符串比较。只要有一个字符不同,就是两个不同的文件。
SnapID Mark 如何使用 SHA-256
上传 SnapID Mark 照片时,服务器会同时存储原图和带水印图像的 SHA-256 指纹。公开验证页面会显示该指纹,以及可信的拍摄时间、取整后的区域和完整性标记。“与我的文件比对”按钮会在收件人的浏览器中计算 SHA-256,因此照片不会被上传,然后与存储的值进行比对。页面还会解释聊天应用重新压缩的情况,以免收件人妄下结论。

三者结合形成三层保障:可信时间说明何时拍摄(请参阅可信时间与手机时间),SnapID 代码和 QR 码指向一份独立的记录,SHA-256 说明文件是否仍然完好。在安全部分了解更多,或试试验证演示。
请记住,这是一种技术核查工具,不是电子签名,也不是经认证的时间戳。越南带时间水印照片的证据效力一文更深入地探讨了这方面的问题。
如果你需要发送收件人能自行核查完整性的照片,下载 SnapID Mark,试着把原图与通过聊天发送的副本比对一下。
常见问题
SHA-256 指纹会泄露照片内容吗?
不会。无法从 64 个字符还原出图像,所以公开指纹不会暴露图片。
通过聊天应用发送的照片对不上,是假的吗?
不是。聊天应用会重新压缩以“照片”形式发送的图片,即使看起来一样,文件也已改变。请对方以文件形式或通过电子邮件发送原图,再进行比对。
在验证页面比对时,我的照片会被上传吗?
不会。你的浏览器在你的设备上计算指纹,图片文件不会离开设备。
一致就说明照片一定是真的吗?
一致只能证明该文件与上传时存储的文件相同。它不能证明场景没有摆拍。还要同时查看时间、区域和完整性标记。
能用从照片导出的 PDF 进行比对吗?
不要用 PDF 比对,因为其中的图像是另一个文件。请用原始 JPEG 进行比对。