C#实现RSA加密和解密详解
RSA加密解密源碼:
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace MyRSA
{
publicclass MyRSA
...{
privatestaticstring publicKey =
"<RSAKeyValue><Modulus>6CdsXgYOyya/yQH"+
"TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L"+
"wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx"+
"PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE"+
"/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+
"w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
privatestaticstring 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>";
staticpublicstring 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"";
}
}
staticpublicstring 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"";
}
}
staticprivatebyte[] 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);
returnnull;
}
}
staticprivatebyte[] 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);
returnnull;
}
}
}
}
namespace MyRSA
...{
publicclass MyRSA
...{
privatestaticstring publicKey =
??? "<RSAKeyValue><Modulus>6CdsXgYOyya/yQH"+
??? "TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L"+
??? "wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx"+
??? "PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE"+
??? "/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+
??? "w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
privatestaticstring 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>";
staticpublicstring 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"";
??? }
}
staticpublicstring 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"";
??? }
}
staticprivatebyte[] 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);
??????? returnnull;
??? }
}
staticprivatebyte[] 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);
??????? returnnull;
??? }
}
}
}
?測試代碼:
????????{
????????????string?encodeString?=?MyRSA.Encrypt("1234567");
????????????Console.WriteLine(encodeString);
????????????string?decode?=?MyRSA.Decrypt(encodeString);
????????????Console.WriteLine(decode);
????????????Console.ReadLine();
????????} posted on 2014-11-14 20:00 NET未來之路 閱讀(...) 評論(...) 編輯 收藏
轉載于:https://www.cnblogs.com/lonelyxmas/p/4098069.html
總結
以上是生活随笔為你收集整理的C#实现RSA加密和解密详解的全部內容,希望文章能夠幫你解決所遇到的問題。