C#RSA非对称加密如何实现用私钥才能加密,公钥解密?``麻烦给方法代码```谢谢```

解决方案 »

  1.   

    //##############################################################################   
      //RSA     方式加密     
      //说明KEY必须是XML的行式,返回的是字符串   
                                          //在有一点需要说明!!该加密方式有   长度   限制的!! //##############################################################################   
      //RSA的加密函数   
      public   string   RSAEncrypt(string   xmlPublicKey,string   EncryptString   )   
      {   
      byte[]   PlainTextBArray;   
      byte[]   CypherTextBArray;   
      string   Result;   
      System.Security.Cryptography.RSACryptoServiceProvider   rsa=new   RSACryptoServiceProvider();   
      rsa.FromXmlString(xmlPublicKey);   
      PlainTextBArray   =   (new   UnicodeEncoding()).GetBytes(EncryptString);   
      CypherTextBArray   =   rsa.Encrypt(PlainTextBArray,   false);   
      Result=Convert.ToBase64String(CypherTextBArray);   
      return     Result;   
      }   
      //RSA的解密函数   
      public   string     RSADecrypt(string   xmlPrivateKey,   string   DecryptString   )   
      {   
      byte[]   PlainTextBArray;   
      byte[]   DypherTextBArray;   
      string   Result;   
      System.Security.Cryptography.RSACryptoServiceProvider   rsa=new   RSACryptoServiceProvider();   
      rsa.FromXmlString(xmlPrivateKey);   
      PlainTextBArray   =Convert.FromBase64String(DecryptString);   
      DypherTextBArray=rsa.Decrypt(PlainTextBArray,   false);   
      Result=(new   UnicodeEncoding()).GetString(DypherTextBArray);   
      return   Result;   
      }   
      //RSA   的密钥产升   
      //产生私钥   和公钥   
      public   void   RSAKey(out   string   xmlKeys,out   string     xmlPublicKey)   
      {   
      System.Security.Cryptography.RSACryptoServiceProvider   rsa=new   RSACryptoServiceProvider();   
      xmlKeys=rsa.ToXmlString(true);   
      xmlPublicKey   =   rsa.ToXmlString(false);   
      }
      

  2.   

    RSA算法非常简单,概述如下:
    找两素数p和q
    取n=p*q
    取t=(p-1)*(q-1)
    取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
    取d*e%t==1这样最终得到三个数: n  d  e设消息为数M (M <n)
    设c=(M**d)%n就得到了加密后的消息c 
    设m=(c**e)%n则 m == M,从而完成对c的解密。
    注:**表示次方,上面两式中的d和e可以互换。在对称加密中:
    n d两个数构成公钥,可以告诉别人;
    n e两个数构成私钥,e自己保留,不让任何人知道。
    给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
    别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解
    从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法
    求得d。RSA简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用RSA 来对所有的信息进行加密,
    最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用
    RSA对刚才的加密密钥进行加密。最后需要说明的是,当前小于1024位的N已经被证明是不安全的
    自己使用中不要使用小于1024位的RSA,最好使用2048位的。
      

  3.   

    DypherTextBArray = rsa.Decrypt(PlainTextBArray, false); 这里提示不正确的项