这是我的测试:
...$ md5sum -b roy.html
f9283ca2833ff7ebb6781ab8d23a21aa *roy.html
...$ md5sum -t roy.html
f9283ca2833ff7ebb6781ab8d23a21aa roy.html
这两种模式之间有什么不同吗?
答案 0 :(得分:4)
“ - B” “--binary”
“ - T” “--text”
答案 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取得联系,尝试找出这些差异的原因。