|
|
Opslået på 04/11/2015 12.37.23
|
|
|

Projektets krav: generer en privat nøgle og en offentlig nøgle, krypterer med offentlig nøgle, dekrypterer med privat nøgle, jeg har implementeret det sådan her,
Jeg håber at kunne hjælpe venner, der har dette behov.
Kildekoden er som følger:
1. Generer et par nøgler:
/// <summary> generer privat nøgle og offentlig nøgle arr[0] for privat nøgle arr[1] for offentlig nøgle /// </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øgle</param> /// <returns></returns> offentlig statisk streng EncryptString(streng sSource,streng sPublicKey) { RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider(); streng klartekst = sKilde; RSA. FromXmlString(sPublicKey); byte[] chifferbytes; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), falsk); Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(klartekst), falsk);
StringBuilder sbString = ny StringBuilder(); for (int i = 0; Jeg < cipherbytes. Længde; 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 (Streng sSource, streng 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.Length; 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-krypterings- og dekrypteringskildekode:
ved brug af System; ved brug af System.Collections.Generic; ved brug af System.Linq; ved brug af System.Text; brug af System.Security.Cryptography;
navnerum MyRSA navnerum 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 (streng base64code)
{
Prøv
{
Opret en UnicodeEncoder til at konvertere mellem byte-array og streng.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Opret en ny instans af RSACryptoServiceProvider til at generere
offentlige og private nøgledata.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
RSA. FromXmlString (privatnøgle);
byte[] krypteretData;
byte[] dekrypteretData;
encryptedData = Convert.FromBase64String(base64code);
Send dataene til DECRYPT, de private nøgleoplysninger
(ved brug af RSACryptoServiceProvider.ExportParameters(true),
og et boolsk flag, der angiver, at der ikke er OAEP-polstring.
dekrypteretData = RSADecrypt(
krypterede data, RSA. ExportParameters(true), falsk);
Vis den dekrypterede klartekst til konsollen.
return ByteConverter.GetString(decryptedData);
}
catch (undtagelse osv.)
{
Undtagelser. LogUndtagelse (undtaget);
Console.WriteLine (f.eks. Besked);
"vend tilbage";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
Prøv
{
Opret en UnicodeEncoder til at konvertere mellem byte-array og streng.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Opret byte-arrays til at indeholde originale, krypterede og dekrypterede data.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] krypteretData;
byte[] dekrypteretData;
Opret en ny instans af RSACryptoServiceProvider til at generere
offentlige og private nøgledata.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
RSA. FromXmlString (privatnøgle);
Send dataene videre til ENCRYPT, den offentlige nøgleinformation
(ved brug af RSACryptoServiceProvider.ExportParameters(false),
og et boolsk flag, der angiver, at der ikke er OAEP-polstring.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters(falsk), falsk);
string base64code = Convert.ToBase64String(encryptedData);
returner base64code;
}
catch (undtagelse osv.)
{
Fang denne undtagelse, hvis krypteringen gjorde det
ikke lykkes.
Undtagelser. LogUndtagelse (undtaget);
Console.WriteLine (f.eks. Besked);
"vend tilbage";
}
}
staticprivatebyte[] RSAEncrypt(
byte[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadder)
{
Prøv
{
Opret en ny instans af RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
Importer RSA-nøgleinformationen. Det kræver kun
at inkludere den offentlige nøgleinformation.
RSA. ImportParameters(RSAKeyInfo);
Krypter det overleverede bytearray og specificér OAEP-udfyldning.
OAEP-udfyldning er kun tilgængelig på Microsoft Windows XP eller
Senere.
returner RSA. Kryptering(DataToEncrypt, DoOAEPPadding);
}
Fang og vis en CryptographicException
til konsollen.
catch (CryptographicException e)
{
Undtagelser.LogUndtagelse(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
byte[] DataToDekryptering,
RSAParameters RSAKeyInfo,
bool DoOAEPPadder)
{
Prøv
{
Opret en ny instans af RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();
Importer RSA-nøgleinformationen. Det her skal
at inkludere oplysningerne om private nøgler.
RSA. ImportParameters(RSAKeyInfo);
Dekrypter det passerede byte-array og specificér OAEP-padding.
OAEP-udfyldning er kun tilgængelig på Microsoft Windows XP eller
Senere.
returner RSA. Dekryptering(DataToDekryptering, DoOAEPPadding);
}
Fang og vis en CryptographicException
til konsollen.
catch (CryptographicException e)
{
Undtagelser.LogUndtagelse(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 kode
|
Tidligere:Byg dit eget personlige forum gratis, du kan tjene penge ved at bygge på dine vegne, og du kan gøre det på tre minutterNæste:Brug af onclick og href i A-tagget i HTML
|