2012-08-15 182 views
3

我一直在寻找,但我似乎无法找到使用RSA进行解密的简单方法。C#RSA使用私钥解密

我已经生成了公钥和私钥,它们存储在两个单独的文件中,并且是XML格式。我没有问题使用FromXmlString将公钥与RSACryptoServiceProvider对象相关联,然后加密字符串。试图解密加密的字符串时,我感到困惑。我不知道如何将私钥数据与RSACryptoServiceProvider相关联,以便我可以使用Decrypt函数。

任何帮助,将不胜感激。

编辑:

的公钥和私钥的格式是由的RSACryptoServiceProvider对象,我只是把到一个文件中生成的XML:

<RSAKeyValue><Modulus>vS7Y5up+6kHMx7hQjKA6sKlIVASaw ... etc ... 

我使用此代码加载公钥:

StreamReader sr = new StreamReader(HttpContext.Current.Server.MapPath("public.key")); 
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
rsa.FromXmlString(sr.ReadToEnd().ToString()); 


我目前还没有尝试过用私钥做任何事,因为我不知道wher e开始。

+0

键是什么样的格式?你用公钥做了什么?你用私钥试过了什么? – 2012-08-15 20:28:01

+0

为了格式化的原因,我编辑了上面的帖子,回答了你的问题。 – Will 2012-08-16 13:15:06

回答

0

我不知道您的情况,但我建议您将关键信息存储在KeyContainer中。如果你这样做,你可以通过名称访问keyContainer,并可以做这样的事情。

// retrieves the maximum number of characters that can be decrypted at once 
private int getMaxBlockSize(int keySize){ 
    int max = ((int)(keysize/8/3))* 4 
    if (keySize/8 mod 3 != 0){ 
     max += 4 
    } 
    return max; 
} 

public string decrypt(string msg, string containerName){ 
    CspParameters params = new CspParameters(); 
    params.KeyContainerName = containerName; 
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(params); 
    StringBuilder decryptedMsg = new StringBuilder(); 
    int maxDecryptSize = getMaxBlockSize(rsa.KeySize); 
    int iterationCount = Math.Floor(msg.length/maxDecryptSize) 
    for(int i=0; i<iterationCount; i++){ 
     int start = i * maxDecryptSize; 
     int blkSize = Math.min(start + maxDecryptSize, msg.Length); 
     Byte[] msgBytes = System.Convert.FromBase64String(msg.Substring(start, blkSize)); 

     decryptedMsg.Append(System.Text.Encoding.Unicode.GetString(RSAProvider.Decrypt(msgBytes, false)); 
    } 
    return decryptedMsg.ToString(); 
} 

我还没有测试过,所以这里可能有一个错误,但你明白了。

+0

我如何最初将私钥存储在容器中?现在它只是在一个文本文件中。 – Will 2012-08-16 14:01:53

+0

http://msdn.microsoft.com/en-us/library/yxw286t2.aspx – Nimnam1 2012-08-16 15:22:31

+0

我得到它的工作,感谢您的帮助。 – Will 2012-08-17 17:10:27