如何在Golang中使用Openssl RSA公私钥对加密和解密数据?

时间:2018-09-16 10:38:11

标签: go openssl public-key-encryption

我正在尝试编写一个程序,该程序使用RSA公钥加密数据,并使用私钥解密数据。 RSA密钥是使用openssl工具生成的。

我为此找到了Spacemonkeygo Openssl https://github.com/spacemonkeygo/openssl包装器。但是无法找到任何样本,而且他们也没有相同的文件。使我无法使用。

请指导我如何在Golang中使用Openssl?

我正在使用首次加密解密和Openssl。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

  

我正在尝试编写一个使用RSA public加密数据的程序   并使用私钥解密数据。 RSA密钥是   用openssl工具生成。

您不需要OpenSSL库软件包来执行此操作:您只需要Go标准库中的某些cryptoencoding和其他软件包。即:

根据密钥创建一个PEM块,将Type设置为“ RSA PRIVATE KEY”或“ RSA PUBLIC KEY”,使用x509函数(对于公共PKIX)解析密钥,使用一种类型断言以使其成为适当的RSA公共/私有类型,使用OAEP填充,SHA-256哈希函数和rand.Reader作为熵的源对消息进行加密,如果将其作为文本,而不是二进制文件,然后base64对其进行解码,并使用相同的文本进行解密,但另一端使用私钥。

特别参见func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)

阅读这些软件包中的文档以及一些有关加密和RSA的常规信息,还有StackOverflow上每个软件包的用法示例-尽管可能未将它们放在一起。

您需要的每个软件包都在Go标准库中。

您可能需要检查PKCS功能版本(例如PKCS8)是否与OpenSSL版本产生的私钥对齐。