我有一個使用gpg密鑰並提示輸入密碼的應用程序。這是我做的方式,(基於一個例子,我在別處找到了:Golang pgp without secring
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上一些用戶都在努力獲取應用程序的工作,原因是他們不知道如何定義secring。
似乎GnuPG的較新版本已被棄用臨時版。
https://www.gnupg.org/faq/whats-new-in-2.1.html#nosecring
我不知道如何閱讀在這一點上使用golang.org/x/crypto/openpgp
密鑰。有沒有這樣做的最好方法的例子?