檢查碼

說明

為檔案產生檢查碼。此任務也可執行檢查碼驗證。

請注意,許多熱門的訊息摘要函數(包括 MD5 和 SHA-1)最近已被破解。如果您打算在注重安全性環境中使用此任務來建立檢查碼,請花點時間調查 JCE 提供者提供的演算法。另請注意,有些 JCE 提供者,例如 The Legion of the Bouncy CastleGNU Crypto 專案格拉茨技術大學 提供的摘要演算法比 JDK 內建的演算法更多。

警告:副檔名的大小寫取決於所使用的演算法。如果您要求 SHA1,您會取得 .SHA1 副檔名;如果您要求 sha1,您會取得副檔名為 .sha1 的檔案。Java 加密引擎在比對演算法時不區分大小寫,因此請選擇與您想要的輸出副檔名相符的名稱,或設定 fileext 屬性。常見雜湊演算法的名稱可以在 Cryptography Architecture Standard Algorithm Name Documentation 中找到

參數

屬性 說明 必要
file 要為其產生檢查碼的檔案。 是,除非指定至少一個巢狀(僅限檔案系統)資源集合。
todir 應寫入檢查碼的根目錄。 否;預設情況下,檢查碼檔案會寫入與原始檔案相同的目錄。自 Apache Ant 1.6 起
algorithm 指定用於計算檢查碼的演算法。請查看 文件 以取得可用的演算法名稱,例如 SHA-1SHA-512 否;預設為 MD5
provider 指定演算法的提供者。
fileext 產生的檢查碼檔案名稱會是原始檔名,加上 fileext 否;預設為 . 和正在使用的演算法名稱
property 此屬性可以表示兩種不同的意思,這取決於 verifyproperty 屬性的存在與否。
如果您沒有設定 verifyproperty 屬性,property 會指定要設定為產生的檢查碼值的屬性名稱。
如果您設定 verifyproperty 屬性,property 會指定您預期產生的檢查碼(檢查碼本身,而不是包含檢查碼的屬性名稱)。
當使用 fileext 或要產生檢查碼的檔案數目大於 1 時,無法指定此參數。
pattern 指定要使用的樣式,作為適合 MessageFormat 的樣式,其中 {0} 會替換為檢查碼,而 {1} 會替換為檔案名稱。自 Ant 1.7.0 起
自 Ant 1.8.2 起 {2} 會替換為檔案相對於要寫入的檢查碼檔案的路徑,{3} 會替換為檔案相對於專案的 basedir 的路徑,而 {4} 會替換為檔案的絕對路徑。
否;預設為 {0}
format 指定要使用的樣式,作為眾所周知的格式之一。支援的值為
名稱 pattern 說明
CHECKSUM {0} 僅檢查碼本身
MD5SUM {0} *{1} GNU textutils md5sum 的格式
SVF MD5 ({1}) = {0} BSD md5 指令的格式
自 Ant 1.7.0 起
否;預設為 CHECKSUM
totalproperty 如果指定,此屬性會指定將會儲存所有檢查碼和檔案路徑的檢查碼的屬性名稱。個別檢查碼和資源集合中檔案的相對路徑(這些檔案是在其中定義檢查碼的集合)會用於計算此檢查碼。(路徑中的檔案分隔符號會在計算前轉換為 /,以確保平台可攜性)。自 Ant 1.6 起
forceoverwrite 即使目的地檔案較新,也會覆寫現有檔案。 否;預設為 no
verifyproperty 指定要設定為 truefalse 的屬性名稱,具體取決於產生的檢查碼是否與現有檢查碼相符。設定此屬性後,產生的檢查碼不會寫入檔案或屬性,而是使用檔案或屬性的內容來與產生的檢查碼進行比對。
readbuffersize 讀取檔案時要使用的緩衝區大小(以位元組為單位)。 否;預設為 8192—如果增加此值,可能會提升大型檔案的效能

指定為巢狀元素的參數

資源集合

資源集合 用於選擇要產生檢查碼的檔案。

範例

範例 1

foo.bar 產生 MD5 校驗碼,並將校驗碼儲存在目標檔案 foo.bar.MD5 中。僅當 foo.bar 比它自己更新時,foo.bar.MD5 才會被覆寫。

<checksum file="foo.bar"/>

範例 2

foo.bar 產生 MD5 校驗碼,並將校驗碼儲存在 foo.bar.MD5 中。如果 foo.bar.MD5 已經存在,它將會被覆寫。

<checksum file="foo.bar" forceOverwrite="yes"/>

範例 3

foo.bar 產生 MD5 校驗碼,並將其儲存在專案屬性 foobarMD5 中。

<checksum file="foo.bar" property="foobarMD5"/>

範例 4

foo.bar 產生 MD5 校驗碼,將其與 foo.bar.MD5 進行比較,並根據結果將 isMD5ok 設為 truefalse

<checksum file="foo.bar" verifyProperty="isMD5ok"/>

範例 5

foo.bar 產生 SHA-512 校驗碼,並將校驗碼儲存在目標檔案 foo.bar.asc 中。僅當 foo.bar 比它自己更新時,foo.bar.asc 才會被覆寫。

<checksum file="foo.bar" algorithm="SHA-512" fileext="asc"/>

範例 6

foo.bar 產生 MD5 校驗碼,將其與屬性 md5 的值進行比較,並根據結果將 isEqual 設為 truefalse

<checksum file="foo.bar" property="${md5}" verifyProperty="isEqual"/>

範例 7

與範例 1 相同,但為每個以名稱 foo 開頭的檔案產生 .MD5 檔案。

<checksum>
  <fileset dir=".">
    <include name="foo*"/>
  </fileset>
</checksum>

範例 8

與範例 4 相同,但僅當校驗碼相符時,將 isChecksumEqual 設為 true,它永遠不會被設為 false。此範例示範與 condition 任務搭配使用。

<condition property="isChecksumEqual">
  <checksum>
    <fileset dir=".">
      <include name="foo.bar"/>
    </fileset>
  </checksum>
</condition>

注意

當處理多個檔案時,如果使用條件和/或 verifyproperty,僅當所有考慮中的檔案的校驗碼都正確相符時,結果才會為 true。