如何获取 CD/DVD 的 sha-1、sha-256 或 MD5?

Ced*_*tin 8 linux dd devices checksum

我只是尝试从他们的.iso文件中刻录 Debian CDDebian DVD,但我有一个奇怪的行为:CD 的校验和是正确的,但 DVD 的校验和不正确。

这是有效的:

  • 下载了两个.iso文件
  • 验证了两个.iso文件的校验和
  • 将 CD debian-7.1.0-amd64-CD-1.iso 刻录到 CD
  • 通过发出以下命令验证 CD 是否正确:

    dd if=/dev/sr0 | md5sum(或 sha-1 或 sha-256)

这工作正常:我通过使用dd和管道输入 md5、sha-1 或 sha-256从 CD 获得的校验和与官方校验和匹配。

现在我不明白的是,我确实从 DVD .iso刻录了一张DVD——并且我知道该文件已正确下载,因为.iso 文件校验和是正确的。

但是,如果我将 DVD 放入驱动器并发出相同的命令:

dd if=/dev/sr0 | md5sum   (or sha-1 or sha-256)
Run Code Online (Sandbox Code Playgroud)

然后我得到一个伪造的校验和。

DVD看起来仍然正确,因为文件似乎都在那里。

所以这是我的问题:我可以通过使用dd并将其输出通过管道传输到 md5sum(或 sha-1 或 sha-256)来验证 DVD 是否已正确刻录,或者是否有一些“特殊”可以使dd用于验证刻录的 CD但不是刻录的 DVD?

*(请注意,我在 OS X 上使用了磁盘工具来刻录 CD 和 DVD)*

fro*_*utz 9

除了吉尔斯的回答,

如果您仍然拥有 ISO 映像,则可以使用cmp而不是校验和。它会告诉您差异发生在哪个字节。它还可以使检查更快,就像早期出现错误一样,它会立即告诉您,而校验和始终必须读取整个媒体。

$ cmp /dev/cdrom /path/to/cdrom.iso
Run Code Online (Sandbox Code Playgroud)

如果出现错误,它应该打印这样的东西

/dev/cdrom /path/to/cdrom.iso differ, byte 123456789, line 42
Run Code Online (Sandbox Code Playgroud)

如果它是正确的,它应该什么都不打印,或者这样:

cmp: EOF on /path/to/cdrom.iso
Run Code Online (Sandbox Code Playgroud)

这意味着有/dev/cdrom比 ISO 中更多的数据,很可能是零填充。

即使在开始任何比较之前,您也可以检查大小。

$ blockdev --getsize64 /dev/cdrom
123456999
$ stat -c %s /path/to/cdrom.iso
123456789
Run Code Online (Sandbox Code Playgroud)

如果相同,校验和也应该匹配。如果/dev/cdrom较大,则应在末尾补零。你可以用hexdump. 使用 ISO 大小作为-s参数。

$ hexdump -s 15931539256 -C /dev/cdrom
3b597ff38  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
3b597fff8  00 00 00 00 00 00 00 00                           |........|
Run Code Online (Sandbox Code Playgroud)

hexdump 对于查看文件中任何其他位置的差异也很有用,以防损坏是由某些故意造成的。


Gil*_*il' 8

据我所知,CD 和 DVD 都由一定数量的固定大小的块组成。您正在刻录的图像可能不是块大小的倍数,在这种情况下,最后一个块将包含一些尾随垃圾。所以当你运行时dd if=/dev/sr0(这是一种混淆的写作方式md5sum </dev/sr0),尾随的垃圾包含在哈希中。

您需要跟踪图像的大小。然后对有效负载(即 ISO 文件)的字节数应用哈希实用程序。

</dev/sr0 head -c "$size" | md5sum
Run Code Online (Sandbox Code Playgroud)

  • CD 扇区长 2,408 字节,但 AFAIR DVD-ROM 以 16 扇区块的倍数(即 32,768 字节)写入数据。`growisofs` 生成的 ISO 映像是 2,048 字节的倍数,但可能不是 32,768 字节的倍数。这可能解释了为什么 CD 校验和正确而 DVD 没有。 (4认同)