亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么驗證分離簽名會導致 OpenPGP.js 出現“消息摘要不匹配”錯誤?

為什么驗證分離簽名會導致 OpenPGP.js 出現“消息摘要不匹配”錯誤?

慕萊塢森 2023-09-07 17:05:34
我可以毫無問題地簽署和驗證測試文件gpg,但通過 OpenGPG.js 驗證簽名失敗,并出現錯誤“消息摘要不匹配”。為什么是這樣?$ gpg --armor --quiet --batch --yes --detach-sig index.html$ gpg --verify index.html.asc index.htmlgpg: Signature made Wed 25 Nov 2020 08:26:34 PM PSTgpg:                using RSA key C361FDC3F93B9E8F8BD7E08D5F873051B2D6C347gpg: Good signature from <key>$ node sandbox.js { signatures:   [ { keyid: [Keyid],       verified: [Promise],       signature: [Signature],       valid: false,       error:        Error: Message digest did not match            at Signature.verify (/home/caleb/src/islands/node_modules/openpgp/dist/openpgp.js:41176:11)            at process._tickCallback (internal/process/next_tick.js:68:7)            at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)            at startup (internal/bootstrap/node.js:283:19)            at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3) } ],  data: 'Test!\n' }
查看完整描述

1 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

總而言之,gpg 的默認操作模式在簽名時使用非文本模式,而 OpenPGP.js 似乎默認為文本模式(至少以此處使用的方式)。添加--textmode到 gpg 命令行允許 OpenPGP.js 驗證簽名,從而解決問題。

如果不需要文本模式,也可以從文件中讀取二進制數據:

...

? ? let msg_data = fs.readFileSync(path + "index.html", null);

? ? let sig_data = fs.readFileSync(path + "index.html.sig", null);

? ? let pubkey_data = fs.readFileSync(path + "pubkey.asc", 'utf8');


? ? let msg = await openpgp.message.fromBinary(msg_data);

? ? let sig = await openpgp.signature.read(sig_data);

? ? let pubkey = await openpgp.key.readArmored(pubkey_data);


? ? openpgp.verify({

? ? ? ? message: msg,

? ? ? ? signature: sig,

? ? ? ? publicKeys: pubkey.keys

? ? }).then(function(verified) {

? ? ? ? console.log(verified);

? ? });

...


查看完整回答
反對 回復 2023-09-07
  • 1 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號