【问题标题】:Verify gpg signature in Go openpgp在 Go openpgp 中验证 gpg 签名
【发布时间】:2015-11-27 18:48:48
【问题描述】:

我正在编写一个下载和验证文件的 Go 程序。 我希望避免强迫用户安装 gnupg(如果可能的话)。

是否可以使用 Go 的 openpgp 库或其他 Go 库验证具有 gpg 签名(asc 文件)的下载文件,如 herehere 所述?

任何演示如何使用 openpgp 来验证具有 asc 签名的文件的示例将不胜感激。

【问题讨论】:

  • @saarrrrr,我已经遇到过那个库,但对我来说如何以这种方式使用它并不明显。如果您能提供一个示例,将不胜感激。我试着澄清一下我的问题。
  • @saarrrrr 该代码似乎正在加密和解密内容。我正在寻找的是使用 asc 签名验证下载的文件。我的问题中有两个示例的链接。看一眼。基本上“gpg --verify package_name.asc”是我想要做的,看起来我需要先添加一个密钥(使用指纹?)才能做到这一点。有什么想法吗?

标签: go gnupg openpgp


【解决方案1】:

我能够使用以下代码验证 gpg 签名:

package main

import (
        "fmt"
        "golang.org/x/crypto/openpgp"
        "os"
)

func main() {
        keyRingReader, err := os.Open("signer-pubkey.asc")
        if err != nil {
                fmt.Println(err)
                return
        }

        signature, err := os.Open("signature.asc")
        if err != nil {
                fmt.Println(err)
                return
        }

        verification_target, err := os.Open("mysql-5.7.9-win32.zip")
        if err != nil {
                fmt.Println(err)
                return
        }

        keyring, err := openpgp.ReadArmoredKeyRing(keyRingReader)
        if err != nil {
                fmt.Println("Read Armored Key Ring: " + err.Error())
                return
        }
        entity, err := openpgp.CheckArmoredDetachedSignature(keyring, verification_target, signature)
        if err != nil {
                fmt.Println("Check Detached Signature: " + err.Error())
                return
        }

        fmt.Println(entity)
}

完整代码:https://gist.github.com/lsowen/d420a64821414cd2adfb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2015-10-06
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多