上下文:我从 code.google 下载了 a file (Audirvana 0.7.1.zip) 到我的 Macbook Pro (Mac OS X 10.6.6)。
我想验证校验和,该特定文件的校验和发布为 862456662a11e2f386ff0b24fdabcb4f6c1c446a (SHA-1)。 git hash-object
给了我一个不同的哈希值,但是 openssl sha1
返回了预期的 862456662a11e2f386ff0b24fdabcb4f6c1c446a。
以下实验似乎排除了任何可能的下载损坏或换行差异,并表明实际上有两种不同的算法在起作用:
$ echo A > foo.txt
$ cat foo.txt
A
$ git hash-object foo.txt
f70f10e4db19068f79bc43844b49f3eece45c4e8
$ openssl sha1 foo.txt
SHA1(foo.txt)= 7d157d7c000ae27db146575c08ce30df893d3a64
这是怎么回事?
最佳答案
你会看到不同之处,因为 git hash-object
不只是对文件中的字节进行哈希处理——它在字符串“blob”之前加上文件大小和 NUL 到散列前的文件内容。 Stack Overflow 上的其他答案中有更多详细信息:
或者,为了说服自己,尝试类似的事情:
$ echo -n hello | git hash-object --stdin
b6fc4c620b67d95f953a5c1c1230aaab5db5a1b0
$ printf 'blob 5\0hello' > test.txt
$ openssl sha1 test.txt
SHA1(test.txt)= b6fc4c620b67d95f953a5c1c1230aaab5db5a1b0
关于git - 为什么 git hash-object 返回的哈希值与 openssl sha1 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5290444/