2015/02/09

檔案校驗碼(驗證碼、checksum)

校驗碼,原文checksum,或譯為驗證碼,有時也稱為雜湊碼(hash sum)。透過校驗碼演算法(函數)計算而得,會是一組獨一無二的文字與數字組合(也可視為是一個很大的數字);不管何時何地,只要輸入相同的內容,通過同樣的校驗碼函數後,都會得到相同的校驗碼。

示意圖如下,輸入內容若不同,得到的校驗碼也一定會不同。注意,圖中的校驗碼是隨便給的。

理論上,輸入不同內容一定會得到不同的校驗碼,然而校驗碼(視為一個大數字)雖大、仍為有限值,所以實際上,兩支檔案內容不同而校驗碼相同的情況,仍可能出現;不過經過精心設計的校驗碼函數,幾乎不可能出現此種狀況,一般使用時毋須擔心。

當需要傳輸檔案時,特別是很大的檔案,提供端可先算出校驗碼,通常是SHA-1或MD5,與檔案一起放在網站上,接收端收到檔案後,再使用相同的校驗碼函數算出校驗碼,比較後若相同,就代表檔案內容無誤,沒有在傳輸過程中受損,沒有被竄改。各種P2P檔案分享協定,如BitTorrent,也會運用校驗碼來檢查。

校驗碼演算法(函數)非常多,常見的有CRC32、MD5、SHA-1、SHA-256、SHA-512,底下介紹幾支能計算檔案校驗碼的軟體與指令。

HashMyFiles
支援:MD5、SHA-1、CRC32、SHA-256、SHA-512、SHA-384
平台:Windows(免費)
官方網站:NirSoft HashMyFiles

用法非常簡單,開啟後把檔案拖拉到視窗內,如此即可。另外,因為計算大型檔案時需要花費不少時間,可到選單「Options-Hash Types」,取消勾選不需要的校驗碼。

HashTab
支援:MD5、SHA1、SHA2、RipeMD、HAVAL、Whirlpool等等
平台:Windows(免費)與Mac OS X(付費購買)
官方網站:Implbits HashTab

與作業系統操作介面整合,在檔案上點案滑鼠右鍵、選「內容」,在「檔案校驗」分頁裡便是校驗碼,按下「設定」後可選取想要的校驗碼。
僅勾選想要的校驗碼。

若是Linux平台,包括Cygwin,可使用指令sha1summd5sum來算出SHA1和MD5校驗碼。

$ sha1sum xyz.zip
1907023be83da53ac0f1d2e5e310ec15acc6cdfb *xyz.zip

$ md5sum xyz.zip
6eebcc746e9159d14d239f4b8b09b6d3 *xyz.zip

若是Mac OS X,可使用指令openssl,加上參數sha1與md5來算出SHA1和MD5校驗碼。

$ openssl sha1 abc.zip
SHA1(abc.zip)= 64310b1750081cd65fa3ff92aa59701a9205fdc6

$ openssl md5 abc.zip
MD5(abc.zip)= 9e22f2a99809b8d11006834d2c17de01

1 comment:

  1. Thanks for sharing! It is really useful!

    ReplyDelete