格式說明
Sfv是simple file verification(簡單檔案校驗)的簡寫,可以以文書編輯或記事本打開本文編寫。但通常網上有軟體Quicksfv、Flashsfv等可創建。它雖說是文字檔案,但不成文,沒有規範。有時創建的sfv被其它程式來檢驗檔案使用,會有錯誤出現:“本文判斷錯誤,並影響crc校驗。”只需改正回來,但原理是一樣。
校驗算法
它採用的是crc32的校驗算法。
crc32校驗產生32bit(8位十六進制數)校驗值,所以一般大家看見的檔案「sfv值」是一個8位的16進制數。
由於crc32產生校驗值時源數據塊的每一個bit位都參與了計算,所以數據塊中即使一位bit發生變化,也會得到不同的crc32值(但對於兩個完全不相干的檔案是有可能有相同校驗值的,因為校驗值的取值空間有限——2^32,而現實中檔案數量一定是大大超過這個值了)。
關於crc32校驗的具體算法,大致的過程是(沒興趣的可以忽略這一段):
採用多項式除法,將一個數據塊(不論大小)中的每一位(bit)作為各項係數來產生一個很長的多項式(例如對一個16進制的數F0h,可以產生多項式1*X^7 + 1*X^6 + 1*X^5 + 1*X^4 + 0*X^3 + 0*X^2 + 0*X^1 + 0*X^0,化簡一下,就變成X^7 + X^6 + X^5 + X^4),然後將產生的多項式除以如下被稱為「發生器多項式」的特殊多項式(X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+1),取結果的餘數部分,就是我們需要的crc32(也就是sfv)值了。至於除法的具體算法,有硬體實現也有很多軟體實現,這裡就不再贅述。
md5是一個訊息摘要算法(也叫單向散列函式)的名稱。它通過一定的算法(任何有關套用密碼學的書里都有具體的算法表述)根據源數據的每一位bit最終產生一個128bit(32位十六進制數)的校驗值。由於長度達到一定的要求,所以在密碼學領域中有一定套用(用它來校驗檔案理論上講由於有更大的取值空間而肯定比sfv更安全,但實際上似乎sfv就夠用了)。