npm - 如何手动确认 package-lock.json 文件中的完整性字段?
问题描述
我可以运行哪些命令来手动生成(或确认)文件integrity
中包含的字段package-lock.json
?
以下是 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 包字段是基于子资源完整性计算的。
根据链接页面,您的示例的正确命令可能是:
$ shasum -b -a 1 /path/to/uglify-js-2.8.29.tgz | awk '{ print $1 }' | xxd -r -p | base64
KcVzMUgFe7Th913zW3qcty5qWd0=
1
使用的密码在哪里(SHA1)。
对于 SHA512,命令有点不同(注意512
用于-a
switch 的值):
$ shasum -b -a 512 /path/to/uri-js-4.2.2.tgz | awk '{ print $1 }' | xxd -r -p | base64
KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
推荐阅读
- c# - 谷歌支付通行证
- azure - 将本地 API 导入到 Azure API 管理
- php - Unyson 演示导入器无效的资源目录
- iis - 在 Azure Web App 上使用 web.config 将子域重写到目录
- soap - 使用基于 MTOM 的 WSDL 文件进行测试
- c - 无法创建全局结构数组
- node.js - bcrypt 不能在 docker 中使用来自 Windows 主机的 linux 容器
- raspberry-pi - GTK:g_timeout_add() 树莓派
- reactjs - 如何删除使用电子邮件和密码在 Firebase 中注册的用户?使用反应
- django - 就通配符而言,路径如何等同于 django 2.0 中的 url?