使用非对称算法私有和公共密钥与RSA C# [英] Using AsymmetricAlgorithm Private and Public key with RSA C#

查看:174
本文介绍了使用非对称算法私有和公共密钥与RSA C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个非对称算法对象,它们包含RSA私有和RSA公钥。私钥是从Windows-MY密钥库和用户证书中的公钥中检索出来的。如何使用这些键和RSACryptoServiceProvider一起使用C#中的RSA算法加密数据?换句话说,我如何指定我想使用我已经有的键?

I have two AsymmetricAlgorithm objects that contain an RSA Private and RSA Public key. The private key was retrieved out of the Windows-MY keystore and the Public key from a user's certificate. How can I use these keys along with RSACryptoServiceProvider to encrypt data using the RSA algorithm in C#? In other words, how can I specify that I want to use keys that I already have?

推荐答案

#region "RSA Encrypt/Decrypt"  
public string RSAEncrypt(string str, string publicKey)  
{  
  //---Creates a new instance of RSACryptoServiceProvider---  
  try {  
     RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();  
     //---Loads the public key---  
     RSA.FromXmlString(publicKey);  
     byte[] EncryptedStr = null;  

     //---Encrypts the string---  
     EncryptedStr = RSA.Encrypt(ASCII.GetBytes(str), false);  
     //---Converts the encrypted byte array to string---  
     int i = 0;  
     System.Text.StringBuilder s = new System.Text.StringBuilder();  
     for (i = 0; i <= EncryptedStr.Length - 1; i++) {  
         //Console.WriteLine(EncryptedStr(i))  
         if (i != EncryptedStr.Length - 1) {  
             s.Append(EncryptedStr[i] + " ");  
         } else {  
             s.Append(EncryptedStr[i]);  
         }  
     }  

     return s.ToString();  
   } catch (Exception err) {  
     Interaction.MsgBox(err.ToString());  
   }  
}  

public string RSADecrypt(string str, string privateKey)  
{  
  try {  
     //---Creates a new instance of RSACryptoServiceProvider---  
     RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();  
     //---Loads the private key---  
     RSA.FromXmlString(privateKey);  

     //---Decrypts the string---  
     byte[] DecryptedStr = RSA.Decrypt(HexToByteArr(str), false);  
     //---Converts the decrypted byte array to string---  
     System.Text.StringBuilder s = new System.Text.StringBuilder();  
     int i = 0;  
     for (i = 0; i <= DecryptedStr.Length - 1; i++) {  
         //Console.WriteLine(DecryptedStr(i))  
         s.Append(System.Convert.ToChar(DecryptedStr[i]));  
     }  
     //Console.WriteLine(s)  
     return s.ToString();  
  } catch (Exception err) {  
     Interaction.MsgBox(err.ToString());  
  }  
}  
#endregion 

公开金钥)应该看起来像这样:
< RSAKeyValue>
< Modulus> yNi8BvATA77f + / 6cU6z [...] 9VULgU =< / Modulus>
< Exponent> AQAB< / Exponent>
< / RSAKeyValue>

The Public Key (arg) should look like this: <RSAKeyValue> <Modulus>yNi8BvATA77f+/6cU6z[...]9VULgU=</Modulus> <Exponent>AQAB</Exponent> </RSAKeyValue>

私钥(arg)应如下所示:
< RSAKeyValue>
< Modulus> yNi8BvATA77f + / 6cU6z [...] 9VULgU =< / Modulus>
< Exponent> AQAB< / Exponent>
< P> 8ZlZPmko3sam9pvD / l [...] ba0MWLjjdydyvmTQ6L8m9IQ ==< / P>
< Q> 1NGHjXyEa9SjUwY [...] v + op2YyyglMeK / Gt5SL0v6xqQZQ ==< / Q>
< DP> LpjE / aSKnWzzBt1E [...] i5f63Ak9wVG3ZPnwVDwefNkMAQ ==< / DP>
< DQ> qAgb8AGNiJom [...] 8x3qaD3wx + UbnM5v3aE5Q ==< / DQ>
< InverseQ> fQ4 + 7r3Nmgvz113L [...] uJqEgCNzw ==< / InverseQ>
< D> B4n7JNeGHzHe / nqEK [...] GaOBtuz0QTgE =< / D>
< / RSAKeyValue>

The Private Key (arg) should look like this: <RSAKeyValue> <Modulus>yNi8BvATA77f+/6cU6z[...]9VULgU=</Modulus> <Exponent>AQAB</Exponent> <P>8ZlZPmko3sam9pvD/l[...]ba0MWLjj9dyUMvmTQ6L8m9IQ==</P> <Q>1NGHjXyEa9SjUwY[...]v+op2YyyglMeK/Gt5SL0v6xqQZQ==</Q> <DP>LpjE/aSKnWzzBt1E[...]i5f63Ak9wVG3ZPnwVDwefNkMAQ==</DP> <DQ>qAgb8AGNiJom[...]8x3qaD3wx+UbnM5v3aE5Q==</DQ> <InverseQ>fQ4+7r3Nmgvz113L[...]uJqEgCNzw==</InverseQ> <D>B4n7JNeGHzHe/nqEK[...]GaOBtuz0QTgE=</D> </RSAKeyValue>

这篇关于使用非对称算法私有和公共密钥与RSA C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆