MD5二进制模式和文本模式有什么区别?

时间:2013-08-01 07:50:31

标签: encryption md5 md5sum

这是我的测试:

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

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

2 个答案:

答案 0 :(得分:4)

“ - B” “--binary”

  • 将每个输入文件视为二进制文件,方法是以二进制模式读取 输出'*'标志。这是--text的反转。在类似的系统上 不区分二进制文件和文本文件的GNU,这个 option仅将每个输入模式标记为二进制:MD5校验和为
    不受影响。此选项是MS-DOS等系统的默认选项 区分二进制文件和文本文件,读取除外 标准输入为终端时的标准输入。

“ - T” “--text”

  • 将每个输入文件视为文本,方法是在文本模式下读取 输出''标志。这是--binary的反转。这个选项 是GNU等系统的默认设置,不区分 二进制和文本文件。在其他系统上,它是默认值 标准输入为终端时读取标准输入。这种模式 如果使用--tag,则永远不会默认。

答案 1 :(得分:0)

我发现二进制模式和非二进制模式之间有一些有趣的区别。

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

问题是相当令我惊讶。我对md5并不陌生,我已经使用它数十年了。但是事实证明,我根据二进制密钥生成的md5 sum / hash是错误。我的第一个迹象是,它比我在一个工作示例中看到的字符长几个字符。我一直无法创建一个与示例一样短的md5总数,而且我也不知道为什么会有差异。

我发现:

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

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

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

例如,我在运行时得到以下输出:

OSX:

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örenTempel取得联系,尝试找出这些差异的原因。