RSA

    static string EnRSA(string data,string publickey)  
    {  
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();   
        byte[] cipherbytes;   
        rsa.FromXmlString(publickey);   
        cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(data), false);   
        return Convert.ToBase64String(cipherbytes);  
          
    }  
      
    static string DeRSA(string data,string privatekey)  
    {  
         
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();   
        byte[] cipherbytes; rsa.FromXmlString(privatekey);   
        cipherbytes = rsa.Decrypt(Convert.FromBase64String(data), false);   
        return Encoding.UTF8.GetString(cipherbytes);  
    } 


调用代码

    Console.WriteLine("RSA非对称加密");  
    Byte[] iv = CreateKey(16);  
    Byte[] key = CreateKey(27);  
    string inputRSA_1 = inputString();  
    RSA rsa = RSA.Create();  
      
    string enData = EnRSA(inputRSA_1,rsa.ToXmlString(false));  
      
      
    Console.WriteLine("加密后的数据:{0}", enData);  
    Console.WriteLine("解密后的数据:{0}", DeRSA(enData,rsa.ToXmlString(true)));  

 DSA(数字签名)

 

     static string EnDSA(string data,string publickey)  
       {  
           DSA dsa = DSA.Create();  
           Byte[] result;  
           dsa.FromXmlString(publickey);  
           SHA1 sha1 = SHA1.Create();  
           result = dsa.CreateSignature(sha1.ComputeHash(Convert.FromBase64String(data)));  
           return Convert.ToBase64String(result);  
      
             
       }  
      
       static bool DeDSA(string data,string privatekey,string originalData)  
       {  
           //Byte[] result;  
           DSA dsa = DSA.Create();  
           dsa.FromXmlString(privatekey);  
           SHA1 sha1 = SHA1.Create();  
           return dsa.VerifySignature(sha1.ComputeHash(Convert.FromBase64String(originalData)),Convert.FromBase64String(data));  
      
       }  

调用代码

    Console.WriteLine("DSA数字签名");  
    string inputDSA_1 = inputString();  
    string inputDSA_2 = inputDSA_1;  
    DSA dsa = DSA.Create();  
    string enData = EnDSA(inputDSA_1, dsa.ToXmlString(true));  
      
    Console.WriteLine("加密后的数据:{0}", enData);  
    Console.WriteLine("解密后的数据:{0}", DeDSA(enData, dsa.ToXmlString(false), inputDSA_2)); 

ECDsa

    static string EnECDsa(string data, CngKey key)  
     {  
         ECDsaCng ecdsa = new ECDsaCng(key);  
           
           
         SHA1 sha1 = SHA1.Create();  
         byte[] result;  
      
         result = ecdsa.SignHash(sha1.ComputeHash(Convert.FromBase64String(data)));  
      
         return Convert.ToBase64String(result);  
      
     }  
      
     static bool DeECDsa(string data, CngKey key,string originalData)  
     {  
         ECDsaCng ecdsa = new ECDsaCng(key);  
         SHA1 sha1 = SHA1.Create();  
      
         return ecdsa.VerifyHash(sha1.ComputeHash(Convert.FromBase64String(originalData)), Convert.FromBase64String(data));  
     }  

调用代码

    Console.WriteLine("ECDsa数字签名");  
    string inputDSA_1 = inputString();  
    string inputDSA_2 = inputDSA_1;  
    CngKey key = CngKey.Create(CngAlgorithm.ECDsaP256);  
      
    string enData = EnECDsa(inputDSA_1, key);  
      
    Console.WriteLine("加密后的数据:{0}", enData);  
    Console.WriteLine("解密后的数据:{0}", DeECDsa(enData, key, inputDSA_2));  

 

.Net 加密 解密 非对称加密 最后修改于 2012-03-25 21:54:42
上一篇