使用sha1sum校验校验和时,文本模式与二进制模式的差异
sha1sum文本模式与二进制模式的区别
嗨,我之前也踩过这个坑,正好跟你聊聊这俩模式的核心区别:
换行符处理是核心差异
文本模式(默认-t)下,sha1sum会自动把文件里的Windows风格换行符\r\n转换成Unix/Linux的\n后再计算哈希;而二进制模式(-b)会原封不动读取文件的每一个字节,包括所有的\r和\n组合,完全不做转换。
举个实际例子:一个Windows生成的文本文件,里面有10行内容,就会有10个\r\n,文本模式计算时会把这些都变成\n,相当于少了10个\r字节,最终哈希自然不一样。直接影响跨平台校验的准确性
如果你从官网拿到的校验和是用二进制模式生成的(比如官网在Windows环境下生成,或者明确标注是二进制哈希),那你在Unix系统用默认文本模式去校验肯定会失败——因为换行符的转换已经改变了文件的实际字节流。反过来,如果校验和是文本模式生成的,那你也得用对应模式去校验。
从你贴的sha1sum --help输出里也能看到细节:
默认模式下,每行输出包含校验和、一个空格、表示输入模式的字符(二进制为'*',文本或二进制无影响时为' ')以及文件名。
也就是说,你看校验和结果行的第二个字符(空格或*),就能知道这个哈希是用哪种模式生成的,方便你校验时选对应模式。
比如你下载了一个Windows的exe安装包,用默认的sha1sum xxx.exe算出来的哈希和官网对不上,别慌,试试sha1sum -b xxx.exe,大概率就能匹配上了。
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

