|
|
Opublikowano 04.11.2015 12:37:23
|
|
|

Wymagania projektu: wygeneruj klucz prywatny i klucz publiczny, szyfruj kluczem publicznym, odszyfruj kluczem prywatnym, zaimplementowałem to tak,
Mam nadzieję, że będę mógł pomóc przyjaciołom, którzy mają taką potrzebę.
Kod źródłowy przedstawia się następująco:
1. Wygeneruj parę kluczy:
/// <summary> Generuj klucz prywatny i klucz publiczny ARR[0] dla klucza prywatnego ARR[1] dla klucza publicznego /// </summary> /// <returns></returns> publiczny ciąg statyczny[] GenerateKeys() { string[] sKeys = nowy String[2]; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString(true); sKeys[1] = rsa. ToXmlString(false); return sKeys; }
2. Szyfrowanie:
/// <summary> /// RSA Encrypt /// </summary> <nazwa parametru="sSource" >Ciąg źródłowy</param> <nazwa parametru="sPublicKey" >klucz publiczny</param> /// <returns></returns> publiczny ciąg statyczny EncryptString(string sSource, string sPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); tekst jawny ciągu = sŹródło; RSA. FromXmlString(sPublicKey); bajtów[] szyfrów; bajt[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(tekst jawny), false);
StringBuilder sbString = nowy StringBuilder(); dla (int i = 0; Mam < Cipherbytes. Długość; i++) { sbString.Append(cipherbytes+ ","); }
3. Deszyfrowanie:
/// <summary> /// RSA Decrypt /// </summary> <nazwa parametru="sSource">Ciąg źródłowy</param> <nazwa parametru="sPrivateKey">Klucz prywatny</param> /// <returns></returns> publiczny statyczny ciąg DecryptString(String sSource, string sPrivateKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); bajt[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(',');
dla (int j = 0; j < sBytes.Length; j++) { if (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } byte[] plaintbytes = rsa. Decrypt(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
Kod źródłowy szyfrowania i deszyfrowania RSA:
z wykorzystaniem System; używając System.Collections.Generic; używając System.Linq; używając System.Text; wykorzystując System.Security.Cryptography;
przestrzeń nazw MyRSA przestrzeń nazw 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)
{
spróbuj
{
Stwórz UnicodeEncoder do konwersji między tablicą bajtową a ciągiem znaków.
UnicodeEncoding ByteConverter = nowy UnicodeEncoding();
Stwórz nową instancję RSACryptoServiceProvider do generowania
Dane klucza publicznego i prywatnego.
RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();
RSA. FromXmlString(privateKey);
bajt[] encryptedData;
bajt[] decryptedData;
encryptedData = Convert.FromFromBase64String(base64code);
Przekaż dane do DECRYPT, czyli informacji klucza prywatnego
(używając RSACryptoServiceProvider.ExportParameters(true),
oraz flagę boole'a bez wypełnienia OAEP.
decryptedData = RSADecrypt(
zaszyfrowane dane, RSA. ExportParameters(true), false);
Wyświetlaj odszyfrowany tekst jawny konsoli.
return ByteConverter.GetString(decryptedData);
}
catch (Exception exc)
{
Exceptions.LogException(exc);
Console.WriteLine(ok. Message);
powrót"";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
spróbuj
{
Stwórz UnicodeEncoder do konwersji między tablicą bajtową a ciągiem znaków.
UnicodeEncoding ByteConverter = nowy UnicodeEncoding();
Tworz tablice bajtów do przechowywania oryginalnych, zaszyfrowanych i odszyfrowanych danych.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
bajt[] encryptedData;
bajt[] decryptedData;
Stwórz nową instancję RSACryptoServiceProvider do generowania
Dane klucza publicznego i prywatnego.
RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();
RSA. FromXmlString(privateKey);
Przekaż dane do ENCRYPT, czyli informacji klucza publicznego
(używając RSACryptoServiceProvider.ExportParameters(false),
oraz flagę boole'a bez wypełnienia OAEP.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters(false), false);
string base64code = Convert.ToBase64String(encryptedData);
zwróć base64code;
}
catch (Exception exc)
{
Złap ten wyjątek, jeśli szyfrowanie to zrobiło
nie odnieść sukcesu.
Exceptions.LogException(exc);
Console.WriteLine(ok. Message);
powrót"";
}
}
staticprivatebyte[] RSAEncrypt(
bajt[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
spróbuj
{
Stwórz nową instancję RSACryptoServiceProvider.
RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();
Zaimportuj informacje o kluczu RSA. To wystarczy
aby uwzględnić informacje o kluczu publicznym.
RSA. ImportParameters(RSAKeyInfo);
Zaszyfruj przekazaną tablicę bajtów i określ OAEP padding.
Wypełnienie OAEP jest dostępne tylko na Microsoft Windows XP lub
Później.
zwróć RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Złap i wyświetl CryptographicException
do konsoli.
catch (CryptographicException e)
{
Exceptions.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
bajt[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
spróbuj
{
Stwórz nową instancję RSACryptoServiceProvider.
RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();
Zaimportuj informacje o kluczu RSA. To potrzeba
aby uwzględnić informacje o kluczu prywatnym.
RSA. ImportParameters(RSAKeyInfo);
Odszyfruj przekazaną tablicę bajtów i określ OAEP padding.
Wypełnienie OAEP jest dostępne tylko na Microsoft Windows XP lub
Później.
zwróć RSA. Decrypt(DataToDecrypt, DoOAEPPadding);
}
Złap i wyświetl CryptographicException
do konsoli.
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();
- }
Skopiuj kod
|
Poprzedni:Zbuduj własne forum za darmo, możesz zarabiać, budując na swoją korzyść, i zrobisz to w trzy minutyNastępny:Użycie onclick i href w znaczniku A w HTML
|