为什么 .sha256 哈希文件的文件名前后包含星号?

为什么 .sha256 哈希文件的文件名前后包含星号?

我见过以下软件的 .sha256 文件:

this_is_a_fake_sha256_hash_of_64_characters  file_name.exe

或者:

this_is_a_fake_sha256_hash_of_64_characters  *file_name.exe

或者:

this_is_a_fake_sha256_hash_of_64_characters  file_name.exe*

我知道 Unix/Linux 有一个奇怪的概念,即在文件名末尾输出星号,表示“这是可执行的”。好吧,我想这解释了。然而,我完全找不到任何地方提到星号在开始文件名。

此外,即使有人会在这里回答并告诉我为什么它有时出现在开头而不是结尾,我仍然想知道为什么你会混淆地在这种“哈希格式”中包含这些星号。毕竟,这是不是本地文件列表输出,但用于验证分布式二进制文件的文件哈希的文件格式。在这样的上下文中,为什么除了实际文件名之外还要包含其他内容?只是为了在人们没有意识到他们需要从实际文件名的开头和结尾删除这些星号时造成问题?

并非所有此类 .sha256 文件都使用星号。有些使用,有些不使用。有些在开头,有些在结尾。

在我的解析器中,我只是简单地删除了这两者,但令我困扰的是,我不明白为什么这样做或这意味着什么。

答案1

手册页说:

默认模式是打印一行带有校验和、表示类型的字符('*' 表示二进制、' ' 表示文本)以及每个文件的名称。

使用sha256sum -b ${filename}您可以触发*文件名之前的行为。

这意味着行格式是以下之一:(请注意,您的示例不正确、无效或文件名中带有星号)

  • ${hash}${space}${space}${filename}, 或者
  • ${hash}${space}${star}${filename}

我看不出有任何方法可以触发*文件名后的行为——即使使文件可执行也无法为我做到这一点。

此外,输入以下其中一种行格式sha256sum -c会导致它中止,并抱怨找不到文件 - 即:它没有处理文件名上的星号前缀/后缀,并将其视为文件名的一部分。

  • ${hash}${space}${space}${filename}${star}, 或者
  • ${hash}${space}${space}${star}${filename}
$ sha256sum test.svg | sed -re 's/$/*/' | sha256sum -c
sha256sum: 'test.svg*': No such file or directory
test.svg*: FAILED open or read
sha256sum: WARNING: 1 listed file could not be read
$ sha256sum test.svg | sed -re 's/  /\0*/' | sha256sum -c
sha256sum: '*test.svg': No such file or directory
*test.svg: FAILED open or read
sha256sum: WARNING: 1 listed file could not be read

文件名之后的约定*来自ls -F(就像/=>@|),并且可能与此无关。

您能重新创建此文件吗?如果可以,该怎么做?


鉴于您的示例都在哈希值和文件名之间有两个空格,我想知道是否存在名为*file_name.exe和的文件file_name.exe*

在我的解析器中,我只是简单地删除了这两者,但令我困扰的是,我不明白为什么这样做或这意味着什么。

这是不正确的行为(请注意 2x 空格字符,或 1x 空格和 1x 星号)。

相关内容