C# 如何在C语言中使用公钥和私钥加密技术#

C# 如何在C语言中使用公钥和私钥加密技术#,c#,encryption,cryptography,public-key-encryption,private-key,C#,Encryption,Cryptography,Public Key Encryption,Private Key,我想使用公钥/私钥技术加密数据。我的意思是,用接收方的公钥加密,接收方可以用自己的私钥解密 我该怎么做?您有什么建议或示例代码吗?代码示例: private static string _privateKey; private static string _publicKey; private static UnicodeEncoding _encoder = new UnicodeEncoding(); private static void RSA() { var rsa = new

我想使用公钥/私钥技术加密数据。我的意思是,用接收方的公钥加密,接收方可以用自己的私钥解密

我该怎么做?您有什么建议或示例代码吗?

代码示例:

private static string _privateKey;
private static string _publicKey;
private static UnicodeEncoding _encoder = new UnicodeEncoding();

private static void RSA()
{
  var rsa = new RSACryptoServiceProvider();
  _privateKey = rsa.ToXmlString(true);
  _publicKey = rsa.ToXmlString(false);

  var text = "Test1";
  Console.WriteLine("RSA // Text to encrypt: " + text);
  var enc = Encrypt(text);
  Console.WriteLine("RSA // Encrypted Text: " + enc);
  var dec = Decrypt(enc);
  Console.WriteLine("RSA // Decrypted Text: " + dec);
}

public static string Decrypt(string data)
{
  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(_privateKey);
  var decryptedByte = rsa.Decrypt(dataByte, false);
  return _encoder.GetString(decryptedByte);
}

public static string Encrypt(string data)
{
  var rsa = new RSACryptoServiceProvider();
  rsa.FromXmlString(_publicKey);
  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();
}
私有静态字符串\u privateKey;
私有静态字符串_公钥;
专用静态UnicodeEncode_编码器=新UnicodeEncode();
私有静态void RSA()
{
var rsa=new RSACryptoServiceProvider();
_privateKey=rsa.ToXmlString(true);
_publicKey=rsa.ToXmlString(false);
var text=“Test1”;
Console.WriteLine(“RSA//Text to encrypt:+Text”);
var enc=加密(文本);
Console.WriteLine(“RSA//加密文本:+enc”);
var dec=解密(enc);
Console.WriteLine(“RSA//解密文本:+dec”);
}
公共静态字符串解密(字符串数据)
{
var rsa=new RSACryptoServiceProvider();
var dataArray=data.Split(新字符[]{',});
字节[]数据字节=新字节[dataArray.Length];
for(int i=0;i
RSACryptServiceProvider不打算对随机数据块进行加密(数据大小限制为keysize)。另外,一般来说,您应该使用OAEP填充,而不是明确地将其切换为PCKS1v1.5,以帮助防范选定的密文攻击。任何人都不应使用此示例代码。@jbtule:那么,请告诉我们使用私钥和公钥概念对大型数据进行加密和解密的最佳方法是什么?@Mou根据我收集的信息,您生成了一个对称密钥,然后使用接收方的公钥对其进行加密。然后接收者用他们的私钥解密,然后你用共享对称密钥加密你的大数据。您可以每n次传输更新对称密钥。我认为这就是SSL的工作原理(我相信这是一个非常简单的描述),您可能希望查看一个好的示例。