【问题标题】:Decrypting a string with private key (RSA)使用私钥 (RSA) 解密字符串
【发布时间】:2012-10-11 17:04:25
【问题描述】:

我有一个公钥和一个私钥,还有一个我想解密的字符串。

公钥格式如下:

-----BEGIN PUBLIC KEY-----
(key here)
-----END PUBLIC KEY-----

私钥格式如下:

-----BEGIN RSA PRIVATE KEY-----
(key here)
-----END RSA PRIVATE KEY----- 

我要解密的字符串已使用公钥加密,然后我需要使用私钥对其进行解密。

我想知道我该怎么做。

我一直在研究这个并找到了RSACryptoServiceProvider,但对于加密/解密,似乎希望密钥采用带有模数和指数的 XML 格式。

我的问题是,有没有一种方法可以使用我拥有的数据生成具有模数和指数的 XML 格式,或者是否有另一种方法可以使用我拥有的数据解密字符串。

【问题讨论】:

  • 非对称密钥无法解密超过其密钥长度的数据。
  • 以下问题的答案可能对您有所帮助:*.com/questions/5357380/…

标签: c# encryption rsa private-key rsacryptoserviceprovider


【解决方案1】:

要解析不是证书的私钥/公钥,您可以使用RSA Public, Private, and PKCS #8 key parser。那里有可用的源代码,可以根据需要转换密钥。转换密钥后,您可以使用下面引用的加密和解密函数。

如果您有证书,您可以使用X509Certificate2 Constructor (String) 从文件中加载您的证书和密钥。加载 X509Certificate2 后,您可以使用 (RSACryptoServiceProvider)cert.PublicKey.Key(RSACryptoServiceProvider)cert.PrivateKey 获取加密密钥。

使用 MSDN 上 X509Certificate2 Class 文档中示例中的加密和解密方法。您需要知道加密数据的格式,以及使用的对称算法(如果有),然后适当地调整代码。

【讨论】:

  • @owlstead 你说得对,我在查看问题时错过了这一点,我看到了 PEM 样式并且看起来不够仔细。我会修改答案。
【解决方案2】:

这是一种 pem 格式,您可以使用bouncy castle(通过 nuget)读取私钥并使用它进行解密。我有一个项目(谷歌keyczar 的c# 实现),在其中我使用它来创建keyczar 密钥集——参见代码:ImportedKeySet。如果您甚至不担心关键参数,并且直接使用 bouncy castle api 进行解密,工作量就会少得多。

如果您没有想要解密的现有数据,您可以使用 keyczar 框架,keyczar 框架更注重简单性和安全加密,而不是解决所有问题的工具。

【讨论】: