18

这是我的测试:

...$ md5sum -b roy.html 
f9283ca2833ff7ebb6781ab8d23a21aa *roy.html
...$ md5sum -t roy.html 
f9283ca2833ff7ebb6781ab8d23a21aa  roy.html

这两种模式有什么不同吗?

4

2 回答 2

11

'-b' '--二进制'</p>


  • 通过以二进制模式读取每个输入文件并输出“*”标志,将每个输入文件视为二进制文件。这是--text 的倒数。在 GNU 等不区分二进制文件和文本文件的系统上,此
    选项仅将每种输入模式标记为二进制:MD5 校验和
    不受影响。此选项是 MS-DOS 等系统上的默认选项,用于
    区分二进制文件和文本文件,但
    在标准输入是终端时读取标准输入除外。

'-t' '--text'</p>

  • 通过以文本模式读取每个输入文件并输出一个“”标志,将每个输入文件视为文本。这是 --binary 的倒数。此选项是 GNU 等不区分二进制文件和文本文件的系统的默认选项。在其他系统上,当标准输入是终端时,默认读取标准输入。如果使用 --tag,则永远不会默认使用此模式。
于 2013-08-01T07:53:43.867 回答
0

我发现二进制模式和非二进制模式之间存在一些有趣的差异。

我的用例是我正在尝试创建 256 位 AES 密钥以用于 AWS S3 块存储服务。这些密钥用于支持服务器端加密 (SSE)。我花了几个小时(几乎几天)试图弄清楚为什么我的代码无法与 S3 交互,从来没有怀疑我的密钥是问题所在。实际上,生成密钥不是问题。我能够很容易地生成二进制密钥和二进制密钥的 base64 编码版本。

问题是什么让我惊讶。我对md5并不陌生,我用了几十年没有失败。但事实证明,我基于二进制密钥生成的 md5 sum/hash 是错误的。我的第一个迹象是,它比我在我正在查看的工作示例中看到的要长几个字符。我无法创建与示例一样短的 md5 总和,我不知道为什么会有差异。

我找到:

OSX (bsd) md5 没有二进制输入模式的概念。OSX (bsd) md5sum 具有二进制输入模式的标志,但它不会更改实际输出的哈希,它只会更改与该哈希相关的元数据。

Alpine Linux md5确实有二进制输入模式的概念。Alpine Linux md5sum 没有二进制输入模式的概念。

Debian Linux md5 似乎不存在 Debian Linux md5sum 有一个二进制输入模式的标志,但它不会更改实际输出的哈希,它只会更改与该哈希相关的元数据。

例如,我在运行时得到这些输出:

操作系统:

openssl rand 32 > key
cat key | md5
936e87c3f08e54d036c7a38dc9dbd540
cat key | md5sum
936e87c3f08e54d036c7a38dc9dbd540  -
cat key | md5sum -b
936e87c3f08e54d036c7a38dc9dbd540 *-

高山Linux:

openssl rand 32 > key
cat key | md5
915b2c6c3368c19f96e9a79089389c15
cat key | md5 -b
kVssbDNowZ+W6aeQiTicFQ==
cat key | md5sum
915b2c6c3368c19f96e9a79089389c15  -

Debian Linux:

openssl rand 32 > key
cat key | md5sum
a44f9c1d1f7a35f2374ad2987296b54b  -
cat key | md5sum -b
a44f9c1d1f7a35f2374ad2987296b54b *-

我发现(至少)AWS S3 所期望的是二进制密钥的 md5,其输出类似于 Alpine Linux 在以下情况下所做的事情:

cat key | md5 -b
kVssbDNowZ+W6aeQiTicFQ==

我将尝试联系 Alpine Linux 的 Sören Tempel,试图找出这些差异的原因。

于 2020-04-12T23:52:33.913 回答