git shasum 和节点 sha1 不产生相同的哈希值

git shasum and node sha1 do not produce the same hashe

$ echo -e 'blob 14[=11=]Hello, World!' | shasum

产生:8ab686eafeb1f44702738c8b0f24f2567c36da6d

运行 这个在 js/node:

var sha1 = require('sha1');

const fileContents = "Hello, World!";
const length = fileContents.length + 1;

const blobString = `blob ${length}[=12=]${fileContents}`;

const hash = sha1(blobString);

console.log(blobString);
console.log(hash);

产生:

blob 14Hello, World!
d4fcfe4d339d4e59d168fdf3c0ad445fa980a7d6

为什么哈希值不相等? (8ab686eafeb1f44702738c8b0f24f2567c36da6d != d4fcfe4d339d4e59d168fdf3c0ad445fa980a7d6)

哈希值不相等,因为输入中的换行符不同。 echo 添加换行符。使用 printf 代替:

printf 'blob 14[=10=]Hello, World!' | shasum
# prints: d4fcfe4d339d4e59d168fdf3c0ad445fa980a7d6

这也有效,但不是可移植的,因为 echo 的标志在所有系统中都不受支持:

echo -ne 'blob 14[=11=]Hello, World!' | shasum