|
|
Publicerad på 2015-11-04 12:37:23
|
|
|

Projektkraven: generera en privat och publik nyckel, kryptera med offentlig nyckel, dekryptera med privat nyckel, jag implementerade det så här,
Jag hoppas kunna hjälpa vänner som har detta behov.
Källkoden är följande:
1. Generera ett par nycklar:
/// <summary> generera privat nyckel och publik nyckel arr[0] för privat nyckel arr[1] för publik nyckel /// </summary> /// <returns></returns> publik statisk sträng[] GenerateKeys() { string[] sKeys = ny sträng[2]; RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString (true); sKeys[1] = rsa. ToXmlString (falsk); återvänder sKeys; }
2. Kryptering:
/// <summary> RSA-kryptering /// </summary> <param name="sSource" >Source-strängen</param> <param name="sPublicKey" >offentlig nyckel</param> /// <returns></returns> publik statisk sträng EncryptString (sträng sSource,string sPublicKey) { RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider(); sträng klartext = sKälla; RSA. FromXmlString (sPublicKey); byte[] chifferbytes; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); Chifferbytar = RSA. Encrypt(Encoding.UTF8.GetBytes(klartext), falsk);
StringBuilder sbString = ny StringBuilder(); för (int i = 0; Jag < chifferbyten. Längd; i++) { sbString.Append(cipherbytes+ ","); }
3. Dekryptering:
/// <summary> RSA-dekryptering /// </summary> <param name="sSource">Source-sträng</param> <param name="sPrivateKey">Private Key</param> /// <returns></returns> publik statisk sträng DecryptString (Sträng sSource, sträng sPrivateKey) { RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(',');
för (int j = 0; j < sBytes. Längd; j++) { om (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } byte[] plaintbytes = rsa. Dekryptera(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
RSA-kryptering och dekrypteringskällkod:
med System; med System.Collections.Generic; med System.Linq; med System.Text; använda System.Security.Cryptography;
namnrymden MyRSA namnrymden 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 Dekryptering (strängbase64code)
{
Försök
{
Skapa en UnicodeEncoder för att konvertera mellan bytearray och sträng.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Skapa en ny instans av RSACryptoServiceProvider för att generera
offentliga och privata nyckeldata.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
RSA. FromXmlString (privatnyckel);
byte[] krypterade data;
byte[] dekrypterade Data;
encryptedData = Convert.FromBase64String (base64code);
Skicka datan till DECRYPT, den privata nyckelinformationen
(med RSACryptoServiceProvider.ExportParameters(true),
och en boolesk flagga som anger att det inte finns OAEP-utfyllning.
decryptedData = RSADecrypt(
krypterade data, RSA. ExportParameters(true), false);
Visa den dekrypterade klartexten på konsolen.
returnera ByteConverter.GetString(decryptedData);
}
catch (undantag ex)
{
Undantag. LogException(exc);
Console.WriteLine (etc. Meddelande);
återvända"";
}
}
staticpublicstring Encrypt(sträng toEncryptString)
{
Försök
{
Skapa en UnicodeEncoder för att konvertera mellan bytearray och sträng.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Skapa bytearrayer för att hålla original, krypterad och dekrypterad data.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] krypterade data;
byte[] dekrypterade Data;
Skapa en ny instans av RSACryptoServiceProvider för att generera
offentliga och privata nyckeldata.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
RSA. FromXmlString (privatnyckel);
Skicka datan till ENCRYPT, den publika nyckelinformationen
(med RSACryptoServiceProvider.ExportParameters(false),
och en boolesk flagga som anger att det inte finns OAEP-utfyllning.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters(false), false);
sträng base64code = Convert.ToBase64String(encryptedData);
returnera base64code;
}
catch (undantag ex)
{
Fånga detta undantag om krypteringen gjorde det
inte lyckas.
Undantag. LogException(exc);
Console.WriteLine (etc. Meddelande);
återvända"";
}
}
staticprivatebyte[] RSAEncrypt(
byte[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Försök
{
Skapa en ny instans av RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
Importera RSA-nyckelinformationen. Det här behöver bara
för att inkludera informationen om den offentliga nyckeln.
RSA. ImportParameters(RSAKeyInfo);
Kryptera den passerade bytearrayen och specificera OAEP-utfyllnad.
OAEP-utfyllnad finns endast på Microsoft Windows XP eller
senare.
återvänd RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Fånga och visa ett kryptografiskt undantag
till konsolen.
catch (CryptographicException e)
{
Undantag.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
byte[] DataToDekryptering,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Försök
{
Skapa en ny instans av RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
Importera RSA-nyckelinformationen. Det här behöver
att inkludera privat nyckelinformation.
RSA. ImportParameters(RSAKeyInfo);
Dekryptera den passerade bytearrayen och specificera OAEP-utfyllning.
OAEP-utfyllnad finns endast på Microsoft Windows XP eller
senare.
återvänd RSA. Dekryptera (DataToDecrypt, DoOAEPPadding);
}
Fånga och visa ett kryptografiskt undantag
till konsolen.
catch (CryptographicException e)
{
Undantag.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
}
}
- static void Main(string[] args)
- {
- string encodeString = MyRSA.Encrypt("1234567");
- Console.WriteLine(encodeString);
- string decode = MyRSA.Decrypt(encodeString);
- Console.WriteLine(decode);
- Console.ReadLine();
- }
Kopiera koden
|
Föregående:Bygg ditt eget personliga forum gratis, du kan tjäna pengar genom att bygga åt dig, och du kan göra det på tre minuterNästa:Användning av onclick och href i A-taggen i HTML
|