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
$ 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