[TOC] > [使用的库 gopenpgp](https://github.com/ProtonMail/gopenpgp) ## goalng示例 ``` package main import ( "fmt" "github.com/ProtonMail/gopenpgp/v2/helper" ) // put keys in backtick (``) to avoid errors caused by spaces or tabs const pubkey = `-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v2.0.22 (GNU/Linux) mQENBGO2c0ABCADq4cKbunJlzR/lEfQ3NUURT/hFYdvN5zl697RBZG0pLw0OK9jk KuMJ0/gLscgS1uSaUfU3kghjQTHmqMSXgPAhio4LqthEym5xFOiOuC1i/6bXt20z 2fb+hrq7FSky9Q33wraEOBp0ojLc1mBzJ+FkklD4K0BrglW8ykYo+mucvexBJE/+ zTlY1fNWob5r3XL+A7RfrK4xGzT5FLP7GYKOLdNflzmjtSJLbETPFbvzWowk8PNL XoCWziYVZCephjNRwFaI5ZTTIQKiWpAcIWeQTCzEpD/L30yyldmjtQP846rqgzrc PfPtexfaapvk2To8/8tdc1l6tDl+pSo3ScnrABEBAAG0I2JpZ2FudC5jbiAobm9u ZSkgPGJpZ2FudEBiaWdhbnQuY24+iQE5BBMBAgAjBQJjtnNAAhsDBwsJCAcDAgEG FQgCCQoLBBYCAwECHgECF4AACgkQ5/ZYAQdME679kgf+O1OR1S820fTippTsmf0N b6FFRPJcacni3ciquRy25Uc6z5C/Bvxk6cjYYhWXgFAJjUZUo0rpTxABDBzmg8SY 8UCcz9sz4eLG7wvkLE2PuHqYPveoBv9s00/Vn18Z8lLdvvigJZiNKnouIt/E8NxG LPCpMNWiNFuFAMP92wR6UqA6Fael0qK+6nwPVCOFR2I0vmGUxn1sRLvQKznwYvcd xKo3fIlfCTbMf171imPmGLuUneMAwObmBG9Oaldmvgao96LW3EVloUu/ijrHSzDA An1TAhRMe4j4MlrjwSQ7gMDR1ALMBzBGNugsB05sMiVlXxHpENSBbPvwgdyCiKv4 zrkBDQRjtnNAAQgAzXCz1MlWaYKFvjN6Pq24rCrEBWAlWJaLK8gVVOr5eKJ22TlZ L6q2lllVdC0szb4NW0vGIFLURelgKEVjlXJ7K5dPDAdVlrNWh69K9vJZkAamQZsz Edfoj5Lpi8wZdRPHdL28d7Zu4RwtJm6dBUw3BfqXhJQ6X9qgLdnYYx2Sy/dQeBWK GR0sFRscSkmmUSW1vGwAo4LNYz56u1OZKL65OzNJxiJH07uhrKsbeiG1Tu4IQItm LjBAmQEdW3wCMN5oYIllnnOoJdaBgThRx2FJIqlM4FtmaUnB+NAOq2rGc+kufpeC W4cgrKEIoa+0MZ6L2yA2WGGfJWAfJyq0cq7miQARAQABiQEfBBgBAgAJBQJjtnNA AhsMAAoJEOf2WAEHTBOuBV4H/jLJttR3w1vO+PyHRmmrL/RsO03KiBT/pE7HMLyM MWWCoaZiFTzdH034VjvccMR23nhZwENVYk1CQubZONX1ME8OThOVzSc1oqivTgQz u91NtYgo5G6fOhB6oU7ZRcbt3iBsFHkv+24TRdsH5DbXyPVgUpTFs8meN0ydssi+ Y8ufV2SCJ31tVdPL8NCA2vLHYHhdagiucOpY0IPtRIDiQ6QQDiXoZRPQtoWr/8b2 XQNu8mMNfj+gYEPb98ekr5vYVk74TwMxlHUy6KlDxLpjkuu3avZORM11pZWsaP3j G5Yzq5kBFlMgmPoIZM3B4nez/BN6JIyvU3pwr5HPHFyKaUs= =E3yx -----END PGP PUBLIC KEY BLOCK----- ` const privkey = `-----BEGIN PGP PRIVATE KEY BLOCK----- Version: GnuPG v2.0.22 (GNU/Linux) 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 weJ3s/wTeiSMr1N6cK+RzxxcimlL =IF1G -----END PGP PRIVATE KEY BLOCK-----` // encrypted private key var passphrase = []byte(`bigant.cn`) // Passphrase of the privKey func main() { // with_pass() // with_key() // with_signa() } func with_signa() { // encrypt message using public key, sign with the private key armor, err := helper.EncryptSignMessageArmored(pubkey, privkey, passphrase, "plain text") if err != nil { panic(err) } fmt.Printf("armor %+v\n", armor) // decrypt armored encrypted message using the private key, verify with the public key // err != nil if verification fails decrypted, err := helper.DecryptVerifyMessageArmored(pubkey, privkey, passphrase, armor) if err != nil { panic(err) } fmt.Printf("decrypted %+v\n", decrypted) } func with_key() { // encrypt plain text message using public key armor, err := helper.EncryptMessageArmored(pubkey, "plain text") if err != nil { panic(err) } fmt.Printf("加密后的值:%+v\n", armor) // decrypt armored encrypted message using the private key and obtain plain text decrypted, err := helper.DecryptMessageArmored(privkey, passphrase, armor) if err != nil { panic(err) } fmt.Printf("解密后的值:%+v\n", decrypted) // encrypt binary message using public key armor2, err := helper.EncryptBinaryMessageArmored(pubkey, []byte("plain text")) if err != nil { panic(err) } fmt.Printf("加密后的二进制:%+v\n", armor2) // decrypt armored encrypted message using the private key expecting binary data decrypted2, err := helper.DecryptBinaryMessageArmored(privkey, passphrase, armor2) if err != nil { panic(err) } fmt.Printf("解密后的值%+v\n", decrypted2) } func with_pass() { password := []byte("hunter2") // Encrypt data with_pass password armor, err := helper.EncryptMessageWithPassword(password, "my message") if err != nil { panic(err) } // Decrypt data with_pass password message, err := helper.DecryptMessageWithPassword(password, armor) if err != nil { panic(err) } fmt.Printf("%+v\n", message) } ``` 加密后的数据格式未 ``` -----BEGIN PGP MESSAGE----- Version: GopenPGP 2.5.0 Comment: https://gopenpgp.org wy4ECQMIfwvOe50uLDjgKNY8AAgm/g0jS7v4x0sCm5juqovDJcbAtwMeHGfNVndo 0jsBSPnyQ26ehpX+jPNJbspOdr1z2wnCL5Zy4U9+1EdaAW5OXnvaPw5lf1y3ajh+ isIjYqVniuxjulV53A== =XcH/ -----END PGP MESSAGE----- ``` 与一般的加密有差异