|
|
Postitatud 04.11.2015 12:37:23
|
|
|

Projekti nõue: genereerida privaatvõti ja avalik võti, krüpteerida avaliku võtmega, dekrüpteerida privaatvõtmega, ma rakendasin selle nii,
Loodan aidata sõpru, kellel on see vajadus.
Lähtekood on järgmine:
1. Genereeri paar võtmeid:
/// <summary> Genereeri privaatvõti ja avaliku võtme arr[0] privaatvõtme arr[1] jaoks avaliku võtme jaoks /// </summary> /// <returns></returns> avalik staatiline string[] GenerateKeys() { string[] sKeys = uus string[2]; RSACryptoServiceProvider rsa = uus RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString(true); sKeys[1] = rsa. ToXmlString (vale); return sKeys; }
2. Krüpteerimine:
/// <summary> /// RSA Encrypt /// </summary> <param name="sSource" >Source string</param> <param name="sPublicKey" >avalik võti</param> /// <returns></returns> avalik staatiline string EncryptString(string sSource, string sPublicKey) { RSACryptoServiceProvider rsa = uus RSACryptoServiceProvider(); string plaintext = sSource; RSA. FromXmlString(sAvalik Võti); bait[] šifribaidid; bait[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); Cipherbytes = rsa. Encrypt(Encoding.UTF8.GetBytes(selge tekst), vale);
StringBuilder sbString = uus StringBuilder(); for (int i = 0; Ma < šifribaite. Pikkus; i++) { sbString.Append(cipherbytes+ ","); }
3. Dekrüpteerimine:
/// <summary> RSA dekrüpteerimine /// </summary> <param name="sSource">Source string</param> <param name="sPrivateKey">Privaatvõti</param> /// <returns></returns> avalik staatiline string DecryptString (string sSource, string sPrivateKey) { RSACryptoServiceProvider rsa = uus RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); bait[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(',');
for (int j = 0; j < sBytes.Pikkus; j++) { if (sBytes[j] != "") { byteEn[j] = Bait.Parse(sBytes[j]); } } bait[] plaintbytes = rsa. Decrypt(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
RSA krüpteerimise ja dekrüpteerimise lähtekood:
kasutades süsteemi; kasutades System.Collections.Generic; kasutades System.Linq'i; kasutades System.Texti; kasutades System.Security.Cryptography;
nimeruum MyRSA nimeruum 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)
{
proovi
{
Loo UnicodeEncoder, et teisendada baitmassiivi ja stringi vahel.
UnicodeEncoding ByteConverter =uus UnicodeEncoding();
Loo uus RSACryptoServiceProvider instant, et genereerida
avaliku ja privaatvõtme andmed.
RSACryptoServiceProvider RSA =uus RSACryptoServiceProvider();
RSA. FromXmlString (privaatvõti);
byte[] encryptedData;
byte[] decryptedData;
encryptedData = Convert.FromBase64String(base64code);
Edasta andmed DECRYPT-ile, privaatvõtme infole
(kasutades RSACryptoServiceProvider.ExportParameters(true),
ja boole'i lipp, mis ei sisalda OAEP pehmendust.
decryptedData = RSADecrypt(
encryptedData, RSA. ExportParameters(tõene), väär);
Kuva dekrüpteeritud selgetekst konsoolile.
tagasta ByteConverter.GetString(decryptedData);
}
catch (erandi exc)
{
Exceptions.LogException(exc);
Console.WriteLine(v.c. Sõnum);
tagasi"";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
proovi
{
Loo UnicodeEncoder, et teisendada baitmassiivi ja stringi vahel.
UnicodeEncoding ByteConverter =uus UnicodeEncoding();
Loo baitmassiivid, mis hoiavad originaalse, krüpteeritud ja dekrüpteeritud andmeid.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] encryptedData;
byte[] decryptedData;
Loo uus RSACryptoServiceProvider instant, et genereerida
avaliku ja privaatvõtme andmed.
RSACryptoServiceProvider RSA =uus RSACryptoServiceProvider();
RSA. FromXmlString (privaatvõti);
Edasta andmed ENCRYPTile, avaliku võtme infole
(kasutades RSACryptoServiceProvider.ExportParameters(vale),
ja boole'i lipp, mis ei sisalda OAEP pehmendust.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters (vale, vale);
string base64code = Convert.ToBase64String(encryptedData);
tagasta base64code;
}
catch (erandi exc)
{
Võta see erand kinni juhuks, kui krüpteerimine seda tegi.
ei õnnestunud.
Exceptions.LogException(exc);
Console.WriteLine(v.c. Sõnum);
tagasi"";
}
}
staticprivatebyte[] RSAEncrypt(
bait[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
proovi
{
Loo uus RSACryptoServiceProvider instants.
RSACryptoServiceProvider RSA =uus RSACryptoServiceProvider();
Impordi RSA võtme info. Selleks on vaja vaid
et lisada avaliku võtme info.
RSA. ImportParameters(RSAKeyInfo);
Krüpteeri läbitud baitide massiivi ja määra OAEP padding.
OAEP polsterdus on saadaval ainult Microsoft Windows XP-l või
Hiljem.
tagasta RSA. Krüpteerimine (DataToEncrypt, DoOAEPPadding);
}
Tuvasta ja kuva krüptograafiline erand
konsoolile.
catch (CryptographicException e)
{
Exceptions.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
bait[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
proovi
{
Loo uus RSACryptoServiceProvider instants.
RSACryptoServiceProvider RSA =uus RSACryptoServiceProvider();
Impordi RSA võtme info. See vajab
et lisada privaatvõtme info.
RSA. ImportParameters(RSAKeyInfo);
Dekrüpteeri läbitud baitide massiivi ja määra OAEP padding.
OAEP polsterdus on saadaval ainult Microsoft Windows XP-l või
Hiljem.
tagasta RSA. Decrypt (DataToDecrypt, DoOAEPPadding);
}
Tuvasta ja kuva krüptograafiline erand
konsoolile.
catch (CryptographicException e)
{
Exceptions.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();
- }
Kopeeri kood
|
Eelmine:Loo oma isiklik foorum tasuta, saad teenida raha enda nimel ehitades ja saad seda teha kolme minutigaJärgmine:Onclick ja href kasutamine HTML-i A-sildis
|