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();
}
{
string encodeString = MyRSA.Encrypt( " 1234567 " );
Console.WriteLine(encodeString);
string decode = MyRSA.Decrypt(encodeString);
Console.WriteLine(decode);
Console.ReadLine();
}