|
|
Postat pe 04.11.2015 12:37:23
|
|
|

Cerințele proiectului sunt generarea unei chei private și a unei chei publice, criptarea cu cheia publică, decriptarea cu cheia privată, am implementat asta astfel,
Sper să pot fi de ajutor prietenilor care au această nevoie.
Codul sursă este următorul:
1. Generează o pereche de chei:
/// <summary> generează cheia privată și cheia publică ARR[0] pentru cheia privată ARR[1] pentru cheia publică /// </summary> /// <returns></returns> șirul static public[] GenerateKeys() { string[] sKeys = String nou[2]; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString (adevărat); sKeys[1] = rsa. ToXmlString (fals); returnează sKeys; }
2. Criptare:
/// <summary> /// RSA Encrypt /// </summary> <param name="sSource" >Șirul sursă</param> <param name="sPublicKey" >cheie publică</param> /// <returns></returns> șirul static public EncryptString(șir sSource, șir sPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); șiru de text clar = sSource; RSA. FromXmlString(sPublicKey); octet[] cipherbyte; octet[] octet En = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(text clar), false);
StringBuilder sbString = noul StringBuilder(); pentru (int i = 0; Am < Cipherbytes. Lungime; i++) { sbString.Append(cipherbytes+ ","); }
3. Decriptare:
/// <summary> Decriptare RSA /// </summary> <param name="sSource">Șirul sursă</param> <param name="sPrivateKey">Cheia privată</param> /// <returns></returns> șirul static public DecryptString(String sSource, șir sPrivateKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); octet[] octet En = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(',');
pentru (int j = 0; j < octeți. Lungime; j++) { dacă (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } octet[] plaintbytes = rsa. Decriptare (byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
Cod sursă pentru criptare și decriptare RSA:
folosind Sistem; folosind System.Collections.Generic; folosind System.Linq; folosind System.Text; folosind System.Security.Cryptography;
Spațiul de nume MyRSA Spațiul de nume 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 Decriptare (string base64code)
{
încearcă
{
Creează un UnicodeEncoder pentru a converti între tabloul de octeți și șirul de ochi.
UnicodeEncoding ByteConverter = nou UnicodeEncoding();
Creează o nouă instanță de RSACryptoServiceProvider pentru a genera
Date cu cheie publică și privată.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString (cheiePrivată);
octet[] criptatData;
octet[] decriptatData;
encryptedData = Convert.FromBase64String(base64code);
Transmite datele către DECRYPT, informațiile despre cheia privată
(folosind RSACryptoServiceProvider.ExportParameters(true),
și un steag boolean care nu specifică nicio umplutură OAEP.
decryptedData = RSADecrypt(
encryptedData, RSA. ExportParameters (true), false);
Afișează textul clar decriptat în consolă.
return ByteConverter.GetString(decryptedData);
}
catch (excepție excepție)
{
Exceptions.LogException(exc);
Console.WriteLine(exc. Mesaj);
întoarce-te"";
}
}
staticpublicstring Encrypt(string laEncryptString)
{
încearcă
{
Creează un UnicodeEncoder pentru a converti între tabloul de octeți și șirul de ochi.
UnicodeEncoding ByteConverter = nou UnicodeEncoding();
Creează table de octeți pentru a stoca date originale, criptate și decriptate.
octet[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
octet[] criptatData;
octet[] decriptatData;
Creează o nouă instanță de RSACryptoServiceProvider pentru a genera
Date cu cheie publică și privată.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString (cheiePrivată);
Transmite datele către ENCRYPT, informațiile cu cheie publică
(folosind RSACryptoServiceProvider.ExportParameters(false),
și un steag boolean care nu specifică nicio umplutură OAEP.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters (false), false);
string base64code = Convert.ToBase64String(encryptedData);
returnează base64code;
}
catch (excepție excepție)
{
Prinde această excepție în cazul în care criptarea a făcut-o
să nu reușească.
Exceptions.LogException(exc);
Console.WriteLine(exc. Mesaj);
întoarce-te"";
}
}
staticprivatebyte[] RSAEncrypt(
octet[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadau)
{
încearcă
{
Creează o nouă instanță de RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Importă informațiile cheie RSA. Este nevoie doar de asta
pentru a include informațiile cu cheie publică.
RSA. ImportParameters (RSAKeyInfo);
Criptează array-ul de octeți pasați și specifică padding-ul OAEP.
Umplutura OAEP este disponibilă doar pe Microsoft Windows XP sau
Mai târziu.
returnează RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Prinde și afișează o CryptographicException
către consolă.
catch (CryptographicException e)
{
Excepții.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
octet[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadau)
{
încearcă
{
Creează o nouă instanță de RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Importă informațiile cheie RSA. Asta are nevoie
pentru a include informațiile despre cheia privată.
RSA. ImportParameters (RSAKeyInfo);
Decriptează array-ul de octeți pasați și specifică umplerea OAEP.
Umplutura OAEP este disponibilă doar pe Microsoft Windows XP sau
Mai târziu.
returnează RSA. Decriptare (DataToDecrypt, DoOAEPPadding);
}
Prinde și afișează o CryptographicException
către consolă.
catch (CryptographicException e)
{
Excepții.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();
- }
Cod de copiere
|
Precedent:Construiește-ți propriul forum personal gratuit, poți face bani construind în numele tău și poți face asta în trei minuteUrmător:Utilizarea onclick și href în tag-ul A din HTML
|