【问题标题】:C# Decryption with X.509 certificate without private key使用没有私钥的 X.509 证书进行 C# 解密
【发布时间】:2015-09-22 02:28:59
【问题描述】:

客户端使用 X.509 证书加密消息并将加密的消息发送到我的 Web 服务器。客户端提供了没有私钥的 X.509 证书(导出为 DER 编码的二进制 X.509 (.cer))。现在我的任务是使用我拥有的 X.509 证书解密消息。

每当我尝试解密消息时,我都会收到“私钥不存在”异常,这是预期的,因为证书不包含私钥。没有私钥,使用x.509证书解密消息是否可行?

其次,如果客户端为证书单独提供密码,我可以创建一个 X509Certificate2 的实例并使用它来解密消息,例如:

X509Certificate2 c = new X509Certificate2("filename", "password");

【问题讨论】:

  • 双密钥系统的全部意义在于,一个密钥用于加密,一个用于解密。

标签: c# encryption cryptography private-key x509certificate2


【解决方案1】:

您将需要私钥来解密消息。例如,您可以要求您的客户向您提供一个包含私钥的 .pfx 文件,但是,这有点倒退,因为通常情况下,使用非对称加密,发送方(您的客户端)应该使用接收方的加密消息(你的)公钥,你用接收者的(你的)私钥解密。这样,私钥就不会共享给多方,从而减少了被泄露的机会。私钥的整体理念是它是私有的 - 只有密钥的所有者才能使用它。

编辑:至于第二个问题,密码不是私钥。您可以生成受密码保护的私钥。这意味着为了使用私钥进行解密,您还必须知道保护该私钥的密码。

编辑 2:我不确定这是否有帮助,但不久前我很难理解如何实际应用这些概念,所以我写了一系列 blog posts 可能会对您有所帮助。我并不声称自己是安全专家,但我所写的内容可能会让您入门。

【讨论】:

  • 我没有发现这些文章有太多错误,Tarun,但我建议您查看您网站上的链接。我看到第 3 条(缺少 .html)和第 5 部分(标题而不是链接)的链接错误。 --- BEGIN CERT --- 之间的 Base64 称为 PEM,有时也称为 ASCII 装甲。
  • 非常感谢您的反馈,不胜感激!
猜你喜欢
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 2014-03-14
  • 2011-05-05
  • 2011-07-09
  • 2017-11-25
  • 2020-03-07
  • 2010-10-28
相关资源
最近更新 更多