C#实现RSA加密和解密详解

RSA加密解密源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
 
  
 
namespace MyRSA
{

public class MyRSA

{

private static string publicKey = 

"<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

"TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" + 

"wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

"PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

"/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

"w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

private static string privateKey = 

"<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

"TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" +

"wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

"PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

"/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

"w9YRXiac=</Modulus><Exponent>AQAB</Exponent>" +

"<P>/aoce2r6tonjzt1IQI6FM4ysR40j/gKvt4d" +

"L411pUop1Zg61KvCm990M4uN6K8R/DUvAQdrRd" +

"VgzvvAxXD7ESw==</P><Q>6kqclrEunX/fmOle" +

"VTxG4oEpXY4IJumXkLpylNR3vhlXf6ZF9obEpG" +

"lq0N7sX2HBxa7T2a0WznOAb0si8FuelQ==</Q>" +

"<DP>3XEvxB40GD5v/Rr4BENmzQW1MBFqpki6FU" +

"GrYiUd2My+iAW26nGDkUYMBdYHxUWYlIbYo6Te" +

"zc3d/oW40YqJ2Q==</DP><DQ>LK0XmQCmY/ArY" +

"gw2Kci5t51rluRrl4f5l+aFzO2K+9v3PGcndjA" +

"StUtIzBWGO1X3zktdKGgCLlIGDrLkMbM21Q==</DQ><InverseQ>" +

"GqC4Wwsk2fdvJ9dmgYlej8mTDBWg0Wm6aqb5kjn" +

"cWK6WUa6CfD+XxfewIIq26+4Etm2A8IAtRdwPl4" +

"aPjSfWdA==</InverseQ><D>a1qfsDMY8DSxB2D" +

"Cr7LX5rZHaZaqDXdO3GC01z8dHjI4dDVwOS5ZFZ" +

"s7MCN3yViPsoRLccnVWcLzOkSQF4lgKfTq3IH40" +

"H5N4gg41as9GbD0g9FC3n5IT4VlVxn9ZdW+WQry" +

"oHdbiIAiNpFKxL/DIEERur4sE1Jt9VdZsH24CJE=</D></RSAKeyValue>";

static public string Decrypt(string base64code)

{

try

{

//Create a UnicodeEncoder to convert between byte array and string.

        UnicodeEncoding ByteConverter = new UnicodeEncoding();

//Create a new instance of RSACryptoServiceProvider to generate

//public and private key data.

        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

        RSA.FromXmlString(privateKey);

byte[] encryptedData;

byte[] decryptedData;

        encryptedData = Convert.FromBase64String(base64code);

//Pass the data to DECRYPT, the private key information 

//(using RSACryptoServiceProvider.ExportParameters(true),

//and a boolean flag specifying no OAEP padding.

        decryptedData = RSADecrypt(

            encryptedData, RSA.ExportParameters(true), false);

//Display the decrypted plaintext to the console. 

        return ByteConverter.GetString(decryptedData);

    }

catch (Exception exc)

{

//Exceptions.LogException(exc);

        Console.WriteLine(exc.Message);

return "";

    }

}

static public string Encrypt(string toEncryptString)

{

try

{

//Create a UnicodeEncoder to convert between byte array and string.

        UnicodeEncoding ByteConverter = new UnicodeEncoding();

//Create byte arrays to hold original, encrypted, and decrypted data.

        byte[] dataToEncrypt = 

            ByteConverter.GetBytes(toEncryptString);

byte[] encryptedData;

byte[] decryptedData;

//Create a new instance of RSACryptoServiceProvider to generate

//public and private key data.

        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

        RSA.FromXmlString(privateKey);

//Pass the data to ENCRYPT, the public key information 

//(using RSACryptoServiceProvider.ExportParameters(false),

//and a boolean flag specifying no OAEP padding.

        encryptedData = RSAEncrypt(

            dataToEncrypt, RSA.ExportParameters(false), false);

string base64code = Convert.ToBase64String(encryptedData);

return base64code;

    }

catch (Exception exc)

{

//Catch this exception in case the encryption did

//not succeed.

//Exceptions.LogException(exc);

        Console.WriteLine(exc.Message);

return "";

    }

}

static private byte[] RSAEncrypt(

byte[] DataToEncrypt, 

    RSAParameters RSAKeyInfo, 

bool DoOAEPPadding)

{

try

{

//Create a new instance of RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

//Import the RSA Key information. This only needs

//toinclude the public key information.

        RSA.ImportParameters(RSAKeyInfo);

//Encrypt the passed byte array and specify OAEP padding.  

//OAEP padding is only available on Microsoft Windows XP or

//later.  

        return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);

    }

//Catch and display a CryptographicException  

//to the console.

    catch (CryptographicException e)

{

//Exceptions.LogException(e);

        Console.WriteLine(e.Message);

return null;

    }

}

static private byte[] RSADecrypt(

byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

bool DoOAEPPadding)

{

try

{

//Create a new instance of RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

//Import the RSA Key information. This needs

//to include the private key information.

        RSA.ImportParameters(RSAKeyInfo);

//Decrypt the passed byte array and specify OAEP padding.  

//OAEP padding is only available on Microsoft Windows XP or

//later.  

        return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);

    }

//Catch and display a CryptographicException  

//to the console.

    catch (CryptographicException e)

{

//Exceptions.LogException(e);

        Console.WriteLine(e.Message);

return null;

    }

}

}

}


 测试代码:

         static  void Main( string[] args)
        {
             string encodeString = MyRSA.Encrypt( " 1234567 ");
            Console.WriteLine(encodeString);


             string decode = MyRSA.Decrypt(encodeString);
            Console.WriteLine(decode);

            Console.ReadLine();
        }

转自:http://www.csharpwin.com/csharpspace/8761r456.shtml

猜你喜欢

转载自chriszeng87.iteye.com/blog/1840592