【发布时间】:2017-12-04 18:11:22
【问题描述】:
如何解密使用 golang 中的私钥签名的消息?
$ openssl genrsa -out ./server/server.key
Generating RSA private key, 2048 bit long modulus
..................+++
.............................................+++
$ openssl rsa -in ./server/server.key -pubout -out ./client/client.pub
writing RSA key
$ echo "secret" | openssl rsautl -inkey ./server/server.key -sign > ./secret
# decrypt with public key
$ openssl rsautl -inkey ./client/client.pub -pubin -in ./secret
secret
【问题讨论】:
-
您是否尝试过查看文档? godoc.org/crypto/rsa你试过什么不起作用?您没有发布任何与 Go 相关的内容。
-
这个库不能用公钥解密消息,只能验证方法
-
@vadv 我认为您误解了非对称密钥加密。您使用公钥加密,然后使用私钥解密,正如您从该包中的函数签名中看到的那样 - Encrypt* 函数使用公钥,而 Decrypt* 函数使用私钥。
-
您似乎也混淆了签名和加密 - 您能澄清这个问题吗?
-
签名验证的内部工作实际上是用私钥对签名进行解密,然后验证结果的格式,并将数据中的哈希值与签名数据的哈希值进行比较。理论上是可以做到的,一些签名验证的实现实际上确实暴露了解密的内容。
标签: encryption go openssl cryptography