【问题标题】:Decrypt with public key, openssl_public_decrypt like用公钥解密,openssl_public_decrypt 之类的
【发布时间】:2013-04-21 18:44:24
【问题描述】:

我有一个向我发送加密消息的服务器。
此消息已使用服务器的私钥加密,我正在尝试使用公钥对其进行解密。
verify 方法不符合我的需要,因为它返回 true 或 false。

我发现 OpenSSL 有一个名为 openssl_public_decrypt 的方法。
我尝试使用 OpenSSL .Net 包装器并没有设法让它工作。

所以我在这里问是否有另一个库可以使用公钥解密并返回解密的消息,就像 OpenSSL 的一样?

提前致谢!

【问题讨论】:

  • 这听起来像是使用 RSA 进行消息签名和恢复的临时尝试。你说“它没有用”,但你没有提供任何细节。例如,您是否使用“NO PADDING”选项?
  • 我只是说我没有设法让它工作。有 2 个 DLL 要添加到工作目录或路径中,我尝试了这两个 DLL,但没有任何结果。我无法加载库,缺少依赖项。即使我可以让它工作,也有太多的限制(必须安装 Microsoft Visual C++ 2010 Redistributable Package,两个 DLL 都必须加入可执行文件,等等......)。
  • @Moonlight-Angel - 在自己处理了这个问题之后,我发现将 php(整个库)简单地编译到我的应用程序中更容易,只需运行 WORKING 命令来解密公钥用私钥编码的数据----不要被网上99%的人所迷惑,私钥是用来加密并保持在锁定/密钥下的,而公共是用来读取数据的,但不能重新创建/伪造与私钥一起使用的加密。

标签: c# openssl rsa


【解决方案1】:

如果你想自己做加密,你可能想看看这里 https://stackoverflow.com/a/15706744/706119

我是为另一个问题写的,但您可能可以在您的场景中使用它

这是一个使用 Bigint 的 RSA 小实现...您必须自己处理填充,但您可以通过这种方式解密...

【讨论】:

  • 感谢您的回答,填充是 PKCS#1。因此,如果我理解正确,rsaOperation 方法既适用于加密又适用于解密?并且“strip PKCS#1_V1.5 padding”评论足以在解密后处理我的填充?如果是这样,非常感谢你:)。
  • @Moonlight-Angel ...您对 rsaOperation 功能是正确的...关于填充,我并没有真正阅读规范,所以这里不能保证,但它适用于 100 个测试用例使用由 .net rsacryptoserviceprovider 类加密并使用该代码解密的随机数据...
【解决方案2】:

私钥通常用于解密,但在您描述的情况下,使用了另一种方法。服务器用私钥解密数据,然后发送给客户端。这样,当客户端使用公钥加密接收到的消息时,它会得到原始数据。

如果您正在开发服务器和客户端,您应该尝试这种方法。如果服务器属于其他人,他们可能已经在使用它。

至于实现,您可以尝试使用内置的 .Net 类进行非对称加密。假设服务器使用 RSA 算法进行加密,则可以使用 RSACryptoServiceProvider 类。

【讨论】:

  • 如你所说,服务器属于其他人,他们肯定不会这样做。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 2013-08-06
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2021-12-21
  • 2017-12-04
相关资源
最近更新 更多