|
|
Publisert på 04.11.2015 12:37:23
|
|
|

Prosjektets krav: generere en privat nøkkel og offentlig nøkkel, kryptere med offentlig nøkkel, dekryptere med privat nøkkel, jeg implementerte det slik,
Jeg håper å kunne hjelpe venner som har dette behovet.
Kildekoden er som følger:
1. Generer et par nøkler:
/// <summary> Generer privat nøkkel og offentlig nøkkel ARR[0] for privat nøkkel ARR[1] for offentlig nøkkel /// </summary> /// <returns></returns> offentlig statisk streng[] GenerateKeys() { string[] sKeys = ny streng[2]; RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString (true); sKeys[1] = rsa. ToXmlString (falsk); returner sKeys; }
2. Kryptering:
/// <summary> RSA-kryptering /// </summary> <param name="sSource" >Source-streng</param> <param name="sPublicKey" >offentlig nøkkel</param> /// <returns></returns> offentlig statisk streng EncryptString(streng sSource,streng sPublicKey) { RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider(); streng klartekst = sKilde; RSA. FromXmlString (sPublicKey); byte[] chifferbyter; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), falsk); Chifferbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(klartekst), falsk);
StringBuilder sbString = ny StringBuilder(); for (int i = 0; Jeg < Cipherbytes. Lengde; i++) { sbString.Append(cipherbytes)+ ","); }
3. Dekryptering:
/// <summary> RSA-dekryptering /// </summary> <param name="sSource">Source-streng</param> <param name="sPrivateKey">Private Key</param> /// <returns></returns> offentlig statisk streng DecryptString (String sSource, string sPrivateKey) { RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), falsk); string[] sBytes = sSource.Split(',');
for (int j = 0; j < sBytes.Lengde; j++) { hvis (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } byte[] plaintbytes = rsa. Dekryptering(byteEn, falsk); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
RSA-kryptering og dekrypteringskildekode:
ved bruk av System; ved bruk av System.Collections.Generic; ved bruk av System.Linq; ved bruk av System.Text; bruk av System.Security.Cryptography;
navnerom MyRSA navnerom 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 (streng base64code)
{
Prøv
{
Lag en UnicodeEncoder for å konvertere mellom byte-array og streng.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Opprett en ny instans av RSACryptoServiceProvider for å generere
offentlige og private nøkkeldata.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
RSA. FromXmlString (privatnøkkel);
byte[] kryptertData;
byte[] dekrypterte Data;
encryptedData = Convert.FromBase64String (base64code);
Send dataene til DECRYPT, den private nøkkelinformasjonen
(ved bruk av RSACryptoServiceProvider.ExportParameters(true),
og et boolsk flagg som spesifiserer ingen OAEP-polstring.
decryptedData = RSADecrypt(
krypterte data, RSA. ExportParameters(true), false);
Vis den dekrypterte klarteksten til konsollen.
return ByteConverter.GetString(decryptedData);
}
catch (Unntak osv.)
{
Unntak. LogException(exc);
Console.WriteLine (osv. Melding);
return";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
Prøv
{
Lag en UnicodeEncoder for å konvertere mellom byte-array og streng.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Lag bytearrays for å holde originale, krypterte og dekrypterte data.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] kryptertData;
byte[] dekrypterte Data;
Opprett en ny instans av RSACryptoServiceProvider for å generere
offentlige og private nøkkeldata.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
RSA. FromXmlString (privatnøkkel);
Send dataene til ENCRYPT, den offentlige nøkkelinformasjonen
(ved bruk av RSACryptoServiceProvider.ExportParameters(false),
og et boolsk flagg som spesifiserer ingen OAEP-polstring.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters(falsk), falsk);
streng base64code = Convert.ToBase64String(encryptedData);
returner base64code;
}
catch (Unntak osv.)
{
Fang dette unntaket i tilfelle krypteringen gjorde det
ikke lykkes.
Unntak. LogException(exc);
Console.WriteLine (osv. Melding);
return";
}
}
staticprivatebyte[] RSAEncrypt(
byte[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Prøv
{
Opprett en ny instans av RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
Importer RSA-nøkkelinformasjonen. Dette trenger bare
for å inkludere informasjonen om offentlig nøkkel.
RSA. ImportParameters(RSAKeyInfo);
Krypter det passerte byte-arrayet og spesifiser OAEP-utfylling.
OAEP-utfylling er kun tilgjengelig på Microsoft Windows XP eller
Senere.
returner RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Fang og vis et kryptografisk unntak
til konsollen.
catch (CryptographicException e)
{
Unntak.LogUnntak(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
byte[] DataToDekryptering,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Prøv
{
Opprett en ny instans av RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
Importer RSA-nøkkelinformasjonen. Dette trenger
for å inkludere informasjonen om private nøkkeler.
RSA. ImportParameters(RSAKeyInfo);
Dekrypter det passerte byte-arrayet og spesifiser OAEP-padding.
OAEP-utfylling er kun tilgjengelig på Microsoft Windows XP eller
Senere.
returner RSA. Dekryptering(DataToDekryptering, DoOAEPPadding);
}
Fang og vis et kryptografisk unntak
til konsollen.
catch (CryptographicException e)
{
Unntak.LogUnntak(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();
- }
Kopier koden
|
Foregående:Bygg ditt eget personlige forum gratis, du kan tjene penger ved å bygge på dine vegne, og du kan gjøre det på tre minutterNeste:Bruk av onclick og href i A-taggen i HTML
|