gpt4 book ai didi

Golang pgp 无需加密

转载 作者:IT王子 更新时间:2023-10-29 02:21:40 26 4
gpt4 key购买 nike

我有一个应用程序使用 gpg key 并提示输入密码才能读取它。这是我这样做的方式(基于我在其他地方找到的示例:

func Decrypt(publicKeyring string, secretKeyring string, key string, password string) (string, error) {

var entity *openpgp.Entity
var entityList openpgp.EntityList

keyringFileBuffer, err := os.Open(secretKeyring)
if err != nil {
return "", err
}

defer keyringFileBuffer.Close()
entityList, err = openpgp.ReadKeyRing(keyringFileBuffer)
if err != nil {
return "", err
}
entity = entityList[0]

passphraseByte := []byte(password)
entity.PrivateKey.Decrypt(passphraseByte)
for _, subkey := range entity.Subkeys {
subkey.PrivateKey.Decrypt(passphraseByte)
}

dec, err := base64.StdEncoding.DecodeString(key)
if err != nil {
return "", err
}

// Decrypt it with the contents of the private key
md, err := openpgp.ReadMessage(bytes.NewBuffer(dec), entityList, nil, nil)
if err != nil {
return "", err
}
bytes, err := ioutil.ReadAll(md.UnverifiedBody)
if err != nil {
return "", err
}
decStr := string(bytes)

return decStr, nil

}

这里假设用户有一个已传递的 KeyRin,默认值是 secring,如下所示:

viper.SetDefault("gpgsecretkeyring", home+"/.gnupg/secring.gpg")

但是,

我收到报告称一些 mac 用户很难让该应用正常运行,原因是他们不知道如何定义加密。

似乎新版本的 GnuPG 已经弃用了加密。

https://www.gnupg.org/faq/whats-new-in-2.1.html#nosecring

此时我不知道如何使用 golang.org/x/crypto/openpgp 读取 key 。是否有任何关于执行此操作的最佳方法的示例?

最佳答案

GnuPG 2.1 引入了两个变化:

  • secring.gpg 合并到 pubring.gpg 文件中,您应该能够从 pubring.gpg 中读取 key 文件。
  • 对于新安装,使用新的 key 箱格式,go 库不支持这种格式(至少到今天为止)。旧安装(因此,具有旧格式的 key 环)不会自动合并。

如果你想使用GnuPG的keyring,直接调用GnuPG。如果您想使用 Go 的库,请不要弄乱 GnuPG 的 key 环文件并存储您自己的 key 副本。

关于Golang pgp 无需加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45911254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com