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

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

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

这是工作原理:

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

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

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

现在我不明白的是我确实从 DVD 刻录了 DVD.iso--而且我知道该文件已正确下载,并且看到.iso 文件校验和正确。

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

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

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

DVD依然看起来正确的是所有文件似乎都在那里。

所以这是我的问题:我可以使用以下命令验证 DVD 是否已正确刻录DD并将其输出传输到 md5sum (或 sha-1 或 sha-256)中,或者是否有一些“特殊”的东西可以使DD可以验证刻录的 CD,但不能验证刻录的 DVD?

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

答案1

除了吉尔斯的回答之外,

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

$ cmp /dev/cdrom /path/to/cdrom.iso

如果出现错误,它应该打印类似这样的内容

/dev/cdrom /path/to/cdrom.iso differ, byte 123456789, line 42

如果正确的话应该打印没有什么, 或这个:

cmp: EOF on /path/to/cdrom.iso

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

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

$ blockdev --getsize64 /dev/cdrom
123456999
$ stat -c %s /path/to/cdrom.iso
123456789

如果相同,则校验和也应该匹配。如果/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                           |........|

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

答案2

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

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

</dev/sr0 head -c "$size" | md5sum

相关内容