如何在C#(RSA)中通过私钥加密

时间:2019-03-26 11:07:20

标签: c# asp.net .net asp.net-mvc bouncycastle

这是我想做的事情

1。创建用于加密的公用,专用密钥对

2。通过私钥加密数据

3。通过公钥解密数据

我想用私钥加密数据,以便将加密后的数据发送给任何人
可以用我的公钥解密
确保数据来自我

这是我现在所拥有的
我正在使用RSACryptoServiceProvider

var rsa = new RSACryptoServiceProvider();  
var   privateKey = rsa.ToXmlString(true);  
var  publicKey = rsa.ToXmlString(false);
  var text = "my messege";
  Console.WriteLine("RSA // Text to encrypt: " + text);
  var enc = Encrypt(text, publicKey);
  Console.WriteLine("RSA // Encrypted Text: " + enc);
  var dec = Decrypt(enc, privateKey);
  Console.WriteLine("RSA // Decrypted Text: " + dec);

我的方法
用于解密

 public static string Decrypt(string data,string pvtK)
                  {
                      var rsa = new RSACryptoServiceProvider();
                      var dataArray = data.Split(new char[] { ',' });
                      byte[] dataByte = new byte[dataArray.Length];
                      for (int i = 0; i < dataArray.Length; i++)
                      {
                          dataByte[i] = Convert.ToByte(dataArray[i]);
                      }

                      rsa.FromXmlString(pvtK);
                      var decryptedByte = rsa.Decrypt(dataByte, false);

                      return _encoder.GetString(decryptedByte);
                  }

用于加密

  public static string Encrypt(string data,string pubK)
                  {
                      var rsa = new RSACryptoServiceProvider();
                      rsa.FromXmlString(pubK);
                      var dataToEncrypt = _encoder.GetBytes(data);
                      var encryptedByteArray = rsa.Encrypt(dataToEncrypt, false).ToArray();
                      var length = encryptedByteArray.Count();
                      var item = 0;
                      var sb = new StringBuilder();
                      foreach (var x in encryptedByteArray)
                      {
                          item++;
                          sb.Append(x);

                          if (item < length)
                              sb.Append(",");
                      }

                      return sb.ToString(); 
                  }  

目前,在通过公钥加密和通过私钥解密时,它可以正常工作

现在通过私钥解密时有两个问题

  1. 当我通过我的私钥对消息进行加密时,它被解密,但是当我通过我的公钥对数据进行解密时,我得到了错误的密钥异常并且无法正常工作

  2. RSACryptoServiceProvider中的
  3. 私钥是公钥和私钥的组合,我如何知道xmlFormat中的实际私钥是哪一个,因此很难确定密钥中的所有含义

这是我的私钥

<RSAKeyValue><Modulus>sHQOnB9obOy9UUvKolGBYUHyGNKXKC7ZqerB/pLQcOKKlhqXAB5KLPf62banbC5DLU5+Mhd25sq5KE5l/vEZeQLia+np2TYwis8bNVQpLYh/Q2MmuldKzl4Al+ziVH90NLe0fX6LiC5W9Q36HkzV16BKrHwLPljNNBNYWENl/p8=</Modulus><Exponent>AQAB</Exponent><P>vGAPI9BTSnOvVKQ9spTt7WaCb3j+Dexy48VHbGV2+h1hKEA7pF4Mrog7VL7MCNp8G8XZIWh3sMa9VHn2bNv0mQ==</P><Q>78xcUFFtngtKxpr6pZssiXIlTThFo7X2zRiUsWLSUKDJlYlGELu8cGAxzbRYirk2psm92Fga1jAPNDhuzpVX9w==</Q><DP>dHcThTn89RAXO8ab2riXbequBEuTD3q8AbTsFsmYyMS3WBJ2jYYUYygZPqkELwkeKHGncC9NqP8G+Z66S82mKQ==</DP><DQ>C7Zel+myQfLpPxQYw/f1T+1MVx41gI6FtHTL5nIeNaP01KH00yJoTNDV/eceIAB14+WcqTF8dhO42mMbPmna9w==</DQ><InverseQ>ORoUweiOyF+eEQ3F3+NU2IdcSYM5TRG/J73er1nBuyfz5QjKpOhSWqtl5W3mNmQmX8/WDv9bFzgE0jPdXQtFTQ==</InverseQ><D>B/agGpHcs7gpdFJNCYjpI5UHOPFdt6DWdPGVCLxI4oqIaG04Lfd8yU1cIyUE2eaEMWn1J9iUQEBoHWmp9vJozLbhzUdQUC+tcrms4dys6U+AhLTJ+obpmlJczdVABSWlwFe1lnoJNqJN9QQyc4tVvcLKzy+YPbhHvb66bfhVcqk=</D></RSAKeyValue>

0 个答案:

没有答案