如何在 go 中将字符串加密为 ASCII 装甲文件
How to Encrypt a String to an ASCII armored file in go
我现在真的很难找到我的代码中的错误 - 任务是将字符串加密成 pgp ASCII 装甲文件 - 人们可以想到的一件简单的事情。
我使用以下函数,受此启发 gist:
// pgp encryption using the pgp RSA certificate
// massive thx to https://gist.github.com/jyap808/8250124
func encToFile(secretString string, filename string) (string, error) {
log.Println("Public Keyring: ", publicKeyring)
encryptionType := "PGP MESSAGE"
// Read in public key
keyringFileBuffer, _ := os.Open(publicKeyring)
defer keyringFileBuffer.Close()
entityList, err := openpgp.ReadArmoredKeyRing(keyringFileBuffer)
check(err)
encbuf := bytes.NewBuffer(nil)
w, err := armor.Encode(encbuf, encryptionType, nil) // the encoder somehow makes this into ASCII armor
check(err)
plaintext, err := openpgp.Encrypt(w, entityList, nil, nil, nil)
check(err)
message := []byte(secretString)
_, err = plaintext.Write(message)
plaintext.Close()
w.Close()
// Output encrypted/encoded string
log.Println("Writing Encrypted Secred to: ", filename)
// we write the file into a file
err = ioutil.WriteFile(filename, encbuf.Bytes(), 0644)
check(err)
log.Println("File:\n", encbuf.String())
return encbuf.String(), nil
}
但是,另一端的人收到此错误消息:
gpg: encrypted with RSA key, ID 5BE299DC
gpg: decryption failed: No secret key
非常欢迎提示和建议!
However, the guys on the other end get this error message:
gpg: encrypted with RSA key, ID 5BE299DC
gpg: decryption failed: No secret key
如果您使用正确的密钥进行加密,我认为您没有做错任何事情。查看密钥服务器上的那个密钥,你加密了最新的(也是唯一的)加密子密钥。
如果“另一端的人”收到一条错误消息,表明他不会持有密钥,那么
- 您使用了错误的加密密钥,
- “另一个人”给了你错误的钥匙或者
- “另一个人”把自己搞砸了。
您可以通过将加密内容传递给 gpg --list-packets
或 pgpdump
来验证问题所在,其中列出了消息中包含的 OpenPGP 数据包,这对调试 OpenPGP 问题非常有帮助。
我现在真的很难找到我的代码中的错误 - 任务是将字符串加密成 pgp ASCII 装甲文件 - 人们可以想到的一件简单的事情。
我使用以下函数,受此启发 gist:
// pgp encryption using the pgp RSA certificate
// massive thx to https://gist.github.com/jyap808/8250124
func encToFile(secretString string, filename string) (string, error) {
log.Println("Public Keyring: ", publicKeyring)
encryptionType := "PGP MESSAGE"
// Read in public key
keyringFileBuffer, _ := os.Open(publicKeyring)
defer keyringFileBuffer.Close()
entityList, err := openpgp.ReadArmoredKeyRing(keyringFileBuffer)
check(err)
encbuf := bytes.NewBuffer(nil)
w, err := armor.Encode(encbuf, encryptionType, nil) // the encoder somehow makes this into ASCII armor
check(err)
plaintext, err := openpgp.Encrypt(w, entityList, nil, nil, nil)
check(err)
message := []byte(secretString)
_, err = plaintext.Write(message)
plaintext.Close()
w.Close()
// Output encrypted/encoded string
log.Println("Writing Encrypted Secred to: ", filename)
// we write the file into a file
err = ioutil.WriteFile(filename, encbuf.Bytes(), 0644)
check(err)
log.Println("File:\n", encbuf.String())
return encbuf.String(), nil
}
但是,另一端的人收到此错误消息:
gpg: encrypted with RSA key, ID 5BE299DC
gpg: decryption failed: No secret key
非常欢迎提示和建议!
However, the guys on the other end get this error message:
gpg: encrypted with RSA key, ID 5BE299DC gpg: decryption failed: No secret key
如果您使用正确的密钥进行加密,我认为您没有做错任何事情。查看密钥服务器上的那个密钥,你加密了最新的(也是唯一的)加密子密钥。
如果“另一端的人”收到一条错误消息,表明他不会持有密钥,那么
- 您使用了错误的加密密钥,
- “另一个人”给了你错误的钥匙或者
- “另一个人”把自己搞砸了。
您可以通过将加密内容传递给 gpg --list-packets
或 pgpdump
来验证问题所在,其中列出了消息中包含的 OpenPGP 数据包,这对调试 OpenPGP 问题非常有帮助。