Encryption MD5二进制模式和文本模式之间有什么区别?
以下是我的测试:Encryption MD5二进制模式和文本模式之间有什么区别?,encryption,md5,md5sum,Encryption,Md5,Md5sum,以下是我的测试: ...$ md5sum -b roy.html f9283ca2833ff7ebb6781ab8d23a21aa *roy.html ...$ md5sum -t roy.html f9283ca2833ff7ebb6781ab8d23a21aa roy.html 这两种模式有什么不同吗 “-b” “--二进制” 以二进制模式读取每个输入文件,并将其视为二进制文件 输出“*”标志。这是文本的倒数。在这样的系统上 不区分二进制文件和文本文件的GNU,这 选项仅将每个输入
...$ md5sum -b roy.html
f9283ca2833ff7ebb6781ab8d23a21aa *roy.html
...$ md5sum -t roy.html
f9283ca2833ff7ebb6781ab8d23a21aa roy.html
这两种模式有什么不同吗 “-b”
“--二进制”
- 以二进制模式读取每个输入文件,并将其视为二进制文件
输出“*”标志。这是文本的倒数。在这样的系统上 不区分二进制文件和文本文件的GNU,这
选项仅将每个输入模式标记为二进制:MD5校验和为
不受影响的此选项是MS-DOS等系统上的默认选项,
区分二进制文件和文本文件,除了读取
标准输入为终端时的标准输入
- 以文本模式读取每个输入文件,并将其视为文本 正在输出“”标志。这是二进制的倒数。此选项 是GNU等系统上的默认值,这些系统不区分 二进制和文本文件。在其他系统上,它是的默认值 当标准输入为终端时读取标准输入。这种模式 如果使用--tag,则从不默认为
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,试图找出这些差异的原因。您能举一个MD5SUM不同的文件示例吗?@Flimm我不知道有任何MD5 sum工具可以做到这一点,但在一些编程语言中,除非指定了“二进制读取模式”,否则在读取时,各种换行符可以自动转换为平台默认值。例如,在Linux上,
\r\n
(Windows newline)可以转换为\n
,或者在Windows上,\r\n
可以转换为\r\n
。请所有读者注意,校验和的使用:二进制模式是标准的。md5的-b标志不是二进制输入模式,而是base64输出模式。它只是改变了输出格式;它对输入或哈希的生成方式没有影响。您只需要选择base64而不是base16(十六进制)对哈希进行编码。谢谢,这是最有用的答案!另请参阅@jpmc26关于多行文件的评论(在Linux上DOS\r\n
可以转换为\n
,在文本模式下可以转换为反向?)。对于所有读者,关于校验和在上的使用:二进制模式是标准的。Linux在C的文本模式下不进行转换,并且在传递到fopen时忽略二进制标志。只有DOS/Windows进行转换,读取时从它自己的\r\n转换到\r\n,写入时从它自己的\r\n转换到\r\n。
cat key | md5 -b
kVssbDNowZ+W6aeQiTicFQ==