使用私钥(RSA)解密字符串

时间:2012-10-11 17:04:26

标签: c# encryption rsa private-key rsacryptoserviceprovider

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

公钥采用以下格式:

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

私钥采用以下格式:

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

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

我想知道如何做到这一点。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

这是一种pem格式,您可以使用bouncy castle(通过nuget)来读取私钥并使用它进行解密。我有一个项目(google keyczar的c#实现),我用它创建了一个keyczar密钥集 - 请参阅代码:ImportedKeySet。如果您甚至不担心关键参数,那么工作就会少得多,并且直接使用充气城堡api来解密。

如果你没有想要解密的现有数据,你可以使用keyczar框架,keyczar框架更多的是关于简单性和安全加密的东西而不是每个问题的工具。