用 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 個字元,日後就能檢查任何檔案是否正是那張相片,不必保存或重新傳送影像本身。
相符能證明什麼,不相符又代表什麼
| 結果 | 能證明 | 不能證明 |
|---|---|---|
| 相符 | 你手上的檔案與記錄指紋的那個檔案逐位元組完全相同 | 場景是真實的,或拍攝前沒有刻意佈置 |
| 不相符 | 檔案和原始檔有某種不同 | 有人蓄意修改內容 |
第二列是大家最常誤解的地方。檔案與原始檔不同,有很多無害的原因:
- 聊天 App 會重新壓縮影像。 WhatsApp、Messenger 和許多 App 會把以「相片」傳送的影像縮小並重新壓縮。
- 社群網站 在你發文時會重新壓縮並刪除中繼資料。
- 用 螢幕截圖 而不是傳送檔案。
- 在圖庫 App 中 旋轉、裁切或調整亮度,即使只是一點點。
- 轉換格式,例如 HEIC 轉 JPEG,或從檢視器「另存新檔」。
所以看到不相符時,正確的問題不是「這是假的嗎?」,而是「這個檔案經過了哪些管道?」
為什麼透過 WhatsApp 或 Messenger 傳的相片永遠不相符
為了節省儲存空間和頻寬,通訊 App 通常會 重新編碼 JPEG 影像:降低解析度、加強壓縮、減少中繼資料。肉眼看起來一樣,但內部的位元組完全不同,所以 SHA-256 也不同。
| 傳送方式 | 通常保留原始檔嗎? | SHA-256 比對 |
|---|---|---|
| 在聊天 App 中以「相片」傳送 | 否,會重新壓縮 | 幾乎一定不相符 |
| 在聊天 App 中以「檔案」或文件傳送 | 通常會 | 通常相符 |
| 電子郵件附件 | 通常會 | 通常相符 |
| 從 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,所以相片不會被上傳,再與儲存的值比對。頁面也會說明聊天 App 重新壓縮的情況,讓收件人不會妄下結論。

這樣就有三層:可信時間 說明何時(請參考 可信時間 vs 手機時間)、SnapID 代碼和 QR 碼 連到獨立的記錄、SHA-256 說明檔案是否仍然完好。更多資訊請見 安全性,或試試 驗證示範。
請記得,這是技術性的檢查工具,不是數位簽章,也不是經認證的時間戳記。時間戳記相片能當證據嗎 對這方面有更深入的探討。
如果你需要傳送收件人能自行查核完整性的相片,下載 SnapID Mark,試著把原始檔和透過聊天傳送的副本比對看看。
常見問題
SHA-256 指紋會洩漏相片內容嗎?
不會。無法從 64 個字元還原影像,所以公開顯示指紋不會暴露畫面。
透過聊天 App 傳送的相片不相符,是假的嗎?
不是。聊天 App 會重新壓縮以「相片」傳送的影像,即使看起來一樣,檔案也已改變。請對方以檔案或電子郵件傳送原始檔,再拿那個比對。
在驗證頁面比對時,我的相片會被上傳嗎?
不會。你的瀏覽器在你的裝置上計算指紋,影像檔案從未離開裝置。
相符就代表相片一定是真的嗎?
相符只證明檔案與上傳時儲存的檔案相同,不能證明場景沒有被佈置。也請一併查看時間、區域和完整性標記。
可以比對從相片匯出的 PDF 嗎?
不要用 PDF 比對,因為 PDF 內的影像是另一個檔案。請用原始 JPEG 比對。