|
|
Objavljeno na 4. 11. 2015 12:37:23
|
|
|

Zahteve projekta: ustvari zasebni in javni ključ, šifrirajte z javnim ključem, dešifrirajte z zasebnim ključem, implementiram takole,
Upam, da bom lahko pomagal prijateljem, ki imajo to potrebo.
Izvorna koda je naslednja:
1. Ustvarite par ključev:
/// <summary> Generirajte zasebni ključ in javni ključ ARR[0] za zasebni ključ ARR[1] za javni ključ /// </summary> /// <returns></returns> javni statični niz[] GenerateKeys() { string[] sKeys = nov string[2]; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString(true); sKeys[1] = rsa. ToXmlString(false); vrni sKeys; }
2. Šifriranje:
/// <summary> /// RSA Encrypt /// </summary> <ime parametra="sSource" >Izvorni niz</param> <ime parametra="sPublicKey" >javni ključ</param> /// <returns></returns> javni statični niz EncryptString(string sSource,string sPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string plaintext = sSource; RSA. FromXmlString(sPublicKey); bajti[] šifriratnih bajtov; bajt[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(navadno besedilo), false);
StringBuilder sbString = novi StringBuilder(); za (int i = 0; Jaz < šifrirne bajte. Dolžina; i++) { sbString.Append(cipherbytes+ ","); }
3. Dešifriranje:
/// <summary> RSA Dešifriranje /// </summary> <param name="sSource">Source string</param> <ime parametra="sPrivateKey">Private Key</param> /// <returns></returns> javni statični niz 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(',');
za (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(); }
--------------------------------------------------------------------
Izvorna koda za šifriranje in dešifriranje RSA:
z uporabo System; z uporabo System.Collections.Generic; z uporabo System.Linq; z uporabo System.Text; uporaba System.Security.Cryptography;
imenski prostor MyRSA imenski prostor 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)
{
poskusi
{
Ustvarite UnicodeEncoder za pretvorbo med bajtnim poljem in nizom.
UnicodeEncoding ByteConverter =nov UnicodeEncoding();
Ustvarite novo instanco RSACryptoServiceProvider za generiranje
Javni in zasebni ključni podatki.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString(privateKey);
bajt[] šifrirani podatki;
bajt[] dešifrirani podatki;
encryptedData = Convert.FromBase64String(base64code);
Podatke posredujte v DECRYPT, podatke o zasebnem ključu
(z uporabo RSACryptoServiceProvider.ExportParameters(true),
in boolean zastavo, ki ne določa OAEP polnila.
decryptedData = RSADecrypt(
šifrirani podatki, RSA. ExportParameters(true), false);
Prikazati dešifrirano izvirno besedilo konzoli.
return ByteConverter.GetString(decryptedData);
}
ulov (Izjema exc)
{
Exceptions.LogException(exc);
Console.WriteLine(izv. Sporočilo);
vrni"";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
poskusi
{
Ustvarite UnicodeEncoder za pretvorbo med bajtnim poljem in nizom.
UnicodeEncoding ByteConverter =nov UnicodeEncoding();
Ustvarite bajtna polja za shranjevanje izvirnih, šifriranih in dešifriranih podatkov.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
bajt[] šifrirani podatki;
bajt[] dešifrirani podatki;
Ustvarite novo instanco RSACryptoServiceProvider za generiranje
Javni in zasebni ključni podatki.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString(privateKey);
Posredovanje podatkov v ENCRYPT, informacije o javnem ključu
(z uporabo RSACryptoServiceProvider.ExportParameters(false),
in boolean zastavo, ki ne določa OAEP polnila.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters(false), false);
string base64code = Pretvori.ToBase64String(encryptedData);
vrni base64code;
}
ulov (Izjema exc)
{
Ujemite to izjemo, če je šifriranje to storilo
ne uspeti.
Exceptions.LogException(exc);
Console.WriteLine(izv. Sporočilo);
vrni"";
}
}
staticprivatebyte[] RSAEncrypt(
bajt[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
poskusi
{
Ustvarite novo instanco RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Uvozite podatke o RSA ključu. To je dovolj
vključiti informacije o javnem ključu.
RSA. ImportParameters(RSAKeyInfo);
Šifrirajte polje prenesenih bajtov in določite OAEP polnilo.
OAEP oblazinjenje je na voljo le na Microsoft Windows XP ali
Kasneje.
vrni RSA. Encrypt(DataToEncrypting, DoOAEPPadding);
}
Ujemite in prikažite CryptographicException
Na konzolo.
catch (CryptographicException e)
{
Exceptions.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
bajt[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
poskusi
{
Ustvarite novo instanco RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Uvozite podatke o RSA ključu. To potrebuje
da vključi podatke o zasebnem ključu.
RSA. ImportParameters(RSAKeyInfo);
Dešifriraj preneseno bajtno polje in določi OAEP polding.
OAEP oblazinjenje je na voljo le na Microsoft Windows XP ali
Kasneje.
vrni RSA. Dešifriranje(DataToDecrypt, DoOAEPPadding);
}
Ujemite in prikažite CryptographicException
Na konzolo.
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();
- }
Kopiraj kodo
|
Prejšnji:Zgradite svoj osebni forum brezplačno, lahko zaslužite z gradnjo v svojem imenu in to v treh minutahNaslednji:Uporaba onclick in href v oznaki A v HTML
|