校验和

描述

为文件生成校验和。此任务也可用于执行校验和验证。

请注意,许多流行的消息摘要函数(包括 MD5 和 SHA-1)最近已被破解。如果您要使用此任务创建在安全环境中使用的校验和,请花一些时间调查您的 JCE 提供商提供的算法。另请注意,一些 JCE 提供商(如 The Legion of the Bouncy CastleGNU Crypto 项目格拉茨技术大学)提供的摘要算法比内置在 JDK 中的算法更多。

警告:扩展名的区分大小写与所用算法相同。如果您请求 SHA1,您将获得 .SHA1 扩展名;如果您请求 sha1,您将获得以 .sha1 结尾的文件。Java 加密引擎在匹配算法时不区分大小写,因此选择一个与您所需的输出扩展名匹配的名称,或设置 fileext 属性。常见哈希算法的名称可以在 密码体系结构标准算法名称文档 中找到。

参数

属性 描述 必需
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 指定要使用的模式,作为众所周知的格式之一。支持的值为
name pattern description
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>

注意

当处理多个文件时,如果使用 condition 和/或 verifyproperty,则只有当所有正在考虑的文件的校验和都正确匹配时,结果才会为 true。