2011年12月29日 星期四

Java - CRC32驗證程式或檔案

如果想要驗證你的程式或是檔案有沒有被更改過時,CRC32是一個很簡單的方式。比如你有一支程式可以幫手機進行檔案的更新,通常作法是先讓使用者 下載新的程式,然後再安裝。但是如果下載後,過了一段時間,程式檔案已經發生損毀,使用者不知道還進行安裝,有可能發生不可預期的錯誤。

因 此,應該在安裝前先檢查一下準備安裝的程式是不是和原本下載的程式一模一樣。CRC32的運作流程是,首先去網路上找一個CRC32的軟體,它可以計算出 你的程式的checksum,然後安裝前再用你自己寫的CRC32程式碼再計算一次當下的程式的checksum, 這兩個checksum如果相同,就代表程式沒有變動過。

用java計算 checksum程式如下:

先要
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;

然後如下:

try {
            CheckedInputStream cis = null;
            cis = new CheckedInputStream(new FileInputStream("/data/test.apk), new CRC32());
            byte[] buf = new byte[128];
            while(cis.read(buf) >= 0) {
            }

            checksum = cis.getChecksum().getValue();

        } catch (Exception e) {
            e.printStackTrace();
        }

假設你原本用網路上抓下來的軟體計算出來的checksum是1000,
然後  checksum = cis.getChecksum().getValue();  這裡計算出來的也是1000,
表示目前這個test.apk和原本提供給使用者的程式是相同的。如果計算出來不是1000,就表示test.apk和當時的程式已經不同了。

沒有留言:

張貼留言