为什么对于相同的输入,sha1sum 的行为会有所不同?

为什么对于相同的输入,sha1sum 的行为会有所不同?

我正在尝试在某些 java 代码中复制 sha1sum 可执行文件的行为,然而,在此过程中我发现,在两种情况下,对于相同的输入,sha1sum 的行为似乎有所不同。

假设输入的“12345”不带单引号且没有换行符。

如果我将这些数据放入文件(file1)并从命令行运行sha1sum:

$ sha1sum file1
8cb2237d0679ca88db6464eac60da96345513964  file1

但是,如果我这样做,我会得到不同的结果:

$ cat file1 | grep -vi foo | grep -vi bar | sha1sum
2672275fe0c456fb671e4f417fb2f9892c7573ba  -

使用 apache commons-codec jar,我可以读取 file1,获取其内容,并对内容执行 .shahex() 并获取第一个结果。但是,我需要获取第二个结果(由于遗留代码),我无法弄清楚为什么 sha1sum 的行为不同,或者 grep 对输入做了什么。

系统运行的是 CentOS 5.4,sha1sum 为 5.97

有什么指点吗?

答案1

grep添加换行符。

$ hd file1
00000000  31 32 33 34 35                                    |12345|
00000005
$ grep -vi test <file1 | hd
00000000  31 32 33 34 35 0a                                 |12345.|
00000006

为了获得相同的结果,您应该在输入末尾添加一个(\n 如果不存在)。

答案2

首先确认序列是否相同:

$ cat file1 | grep -vi foo | grep -vi bar > /tmp/junk
$ cmp file1 /tmp/junk

否则你就只是在追逐自己的尾巴。

答案3

您的 grep 别名是否具有 --color?您是否检查过管道的输出中没有 sha1sum?

相关内容