Windows环境下无法用GnuPG验证网页PGP签名文本的求助
解决Windows环境下PGP网页签名验证失败的问题
嘿,我刚好之前在日文版Windows环境里踩过一模一样的PGP签名验证的坑,来给你捋捋怎么解决!你的错误提示里的BAD signature大概率是两个问题叠加导致的:网页复制的格式被污染+导入的密钥和签名者不匹配。
第一步:先搞定密钥匹配的问题
你看错误提示里明确说了签名用的是RSA密钥C5787FA3EF733C40,归属是faramir.cl (It's a nickname, of course) <faramir.cl@gmail.com>,但你之前用gpg --search-key dshaw@jabberwocky.com导入的是另一个邮箱的密钥,完全不对应!
直接用密钥ID导入正确的公钥:
gpg --recv-keys C5787FA3EF733C40
第二步:干净获取并保存签名文件
从网页直接复制文本很容易被浏览器或系统偷偷修改换行符/编码,这是Windows下最常见的坑:
- 不要直接复制网页渲染的文本,右键网页选择「查看页面源代码」(或按F12打开开发者工具切换到源代码标签)
- 在源代码里精准找到从
-----BEGIN PGP SIGNED MESSAGE-----到-----END PGP SIGNATURE-----的完整块,确保连首尾的分隔线都完整复制,不要漏任何字符 - 用VS Code粘贴内容后,做两个关键设置:
- 右下角编码选择UTF-8(别选带BOM的UTF-8)
- 右下角换行选择LF(不要用Windows默认的CRLF)
- 保存为
message.asc,文件名尽量用英文,避免特殊字符
第三步:重新验证
完成上面两步后,再运行验证命令:
gpg --verify message.asc
额外的排查小技巧
如果还是不行,先检查文件的换行符是否真的是LF:
# 检查文件里有没有CRLF换行 Get-Content message.asc -Raw | Select-String -Pattern "`r`n" # 如果有输出,手动转成LF (Get-Content message.asc -Raw) -replace "`r`n", "`n" | Set-Content message.asc -NoNewline -Encoding UTF8
我当初就是因为直接复制网页文本导致换行符被转成CRLF,加上导入错了密钥,才出现和你一模一样的错误,按照上面的步骤操作应该就能解决啦!
内容的提问来源于stack exchange,提问作者hani
相关产品推荐
相关产品推荐

