如何手动确认 package-lock.json 文件中的完整性字段?
How to manually confirm integrity field in package-lock.json file?
我可以 运行 手动生成(或确认)package-lock.json
文件中包含的 integrity
字段的哪些命令?
这是一个使用 SHA1 的例子:
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
另一个使用 SHA512:
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
我的大胆猜测是 运行 对 tgz 文件指定的哈希值,然后对其进行 base64 编码,但事实并非如此。例如:
$ sha1sum.exe uglify-js-2.8.29.tgz
29c5733148057bb4e1f75df35b7a9cb72e6a59dd *uglify-js-2.8.29.tgz
$ sha1sum.exe uglify-js-2.8.29.tgz | cut -d " " -f1
29c5733148057bb4e1f75df35b7a9cb72e6a59dd
$ sha1sum.exe uglify-js-2.8.29.tgz | cut -d " " -f1 | base64
MjljNTczMzE0ODA1N2JiNGUxZjc1ZGYzNWI3YTljYjcyZTZhNTlkZAo=
这显然不等于:
KcVzMUgFe7Th913zW3qcty5qWd0=
看起来这个 NPM 包字段是基于 Subresource Integrity 计算的。
根据链接页面,您的示例的正确命令可能是:
$ shasum -b -a 1 /path/to/uglify-js-2.8.29.tgz | awk '{ print }' | xxd -r -p | base64
KcVzMUgFe7Th913zW3qcty5qWd0=
其中 1
是使用的密码 (SHA1)。
对于 SHA512,命令有点不同(注意 512
值用于 -a
开关):
$ shasum -b -a 512 /path/to/uri-js-4.2.2.tgz | awk '{ print }' | xxd -r -p | base64
KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
我可以 运行 手动生成(或确认)package-lock.json
文件中包含的 integrity
字段的哪些命令?
这是一个使用 SHA1 的例子:
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
另一个使用 SHA512:
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
我的大胆猜测是 运行 对 tgz 文件指定的哈希值,然后对其进行 base64 编码,但事实并非如此。例如:
$ sha1sum.exe uglify-js-2.8.29.tgz
29c5733148057bb4e1f75df35b7a9cb72e6a59dd *uglify-js-2.8.29.tgz
$ sha1sum.exe uglify-js-2.8.29.tgz | cut -d " " -f1
29c5733148057bb4e1f75df35b7a9cb72e6a59dd
$ sha1sum.exe uglify-js-2.8.29.tgz | cut -d " " -f1 | base64
MjljNTczMzE0ODA1N2JiNGUxZjc1ZGYzNWI3YTljYjcyZTZhNTlkZAo=
这显然不等于:
KcVzMUgFe7Th913zW3qcty5qWd0=
看起来这个 NPM 包字段是基于 Subresource Integrity 计算的。
根据链接页面,您的示例的正确命令可能是:
$ shasum -b -a 1 /path/to/uglify-js-2.8.29.tgz | awk '{ print }' | xxd -r -p | base64
KcVzMUgFe7Th913zW3qcty5qWd0=
其中 1
是使用的密码 (SHA1)。
对于 SHA512,命令有点不同(注意 512
值用于 -a
开关):
$ shasum -b -a 512 /path/to/uri-js-4.2.2.tgz | awk '{ print }' | xxd -r -p | base64
KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==