|
|
Julkaistu 4.11.2015 12.37.23
|
|
|

Projektin vaatimukset: luoda yksityinen ja julkinen avain, salata julkisella avaimella, purkaa salaus yksityisellä avaimella, toteutin sen näin,
Toivon voivani auttaa ystäviä, joilla on tämä tarve.
Lähdekoodi on seuraava:
1. Luo pari avainta:
/// <summary> luo yksityinen avain ja julkinen avain arr[0] yksityisavaimelle arr[1] julkiselle avaimelle /// </summary> /// <returns></returns> julkinen staattinen merkkijono[] GenerateKeys() { string[] sKeys = uusi String[2]; RSACryptoServiceProvider rsa = uusi RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString(totta); sKeys[1] = rsa. ToXmlString (väärin); return sKeys; }
2. Salaus:
/// <summary> RSA-salaus /// </summary> <param name="sSource" >Lähdemerkkijono</param> <param name="sPublicKey" >julkinen avain</param> /// <returns></returns> julkinen staattinen merkkijono EncryptString(merkkijono sSource, merkkijono sPublicKey) { RSACryptoServiceProvider rsa = uusi RSACryptoServiceProvider(); string plaintext = sSource; RSA. FromXmlString(sPublicKey); tavu[] salatavut; tavu[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), väärin); Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(selvä teksti), väärin);
StringBuilder sbString = uusi StringBuilder(); kun (int i = 0; Minulla < salatavuja. Pituus; i++) { sbString.Append(cipherbytes+ ","); }
3. Salauksen purku:
/// <summary> RSA:n salauksen purku /// </summary> <param name="sSource">Lähdemerkkijono</param> <param name="sPrivateKey">Yksityisavain</param> /// <returns></returns> julkinen staattinen merkkijono DecryptString (merkkijono sSource, merkkijono sPrivateKey) { RSACryptoServiceProvider rsa = uusi RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); tavu[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), väärin); string[] sBytes = sSource.Split(',');
kun (int j = 0; j < sTavut.Pituus; j++) { if (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } tavu[] plaintbytes = rsa. Decrypt(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
RSA-salaus ja purku lähdekoodi:
käyttämällä Systemiä; käyttäen System.Collections.Generic-tiedostoa; käyttäen System.Linqia; käyttäen System.Textiä; käyttäen System.Security.Cryptographya;
nimiavaruus MyRSA nimiavaruus 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 (merkkijono base64code)
{
yritä
{
Luo UnicodeEncoder muuntamaan tavutaulukon ja merkkijonon välillä.
UnicodeEncoding ByteConverter = uusi UnicodeEncoding();
Luo uusi RSACryptoServiceProvider-instanssi luodaksesi
julkisen ja yksityisen avaimen tiedot.
RSACryptoServiceProvider RSA = uusi RSACryptoServiceProvider();
RSA. FromXmlString (yksityisavain);
byte[] encryptedData;
byte[] decryptedData;
encryptedData = Muunnata.FromBase64String(base64code);
Välitä tiedot DECRYPTille, yksityisen avaimen tiedoille
(käyttäen RSACryptoServiceProvider.ExportParameters(true),
ja boolean-lippu, jossa ei ole OAEP-pehmustetta.
decryptedData = RSADecrypt(
encryptedData, RSA. ExportParameters(tosi), epätosi);
Näytä purettu selvä teksti konsolille.
return ByteConverter.GetString(decryptedData);
}
catch (poikkeus-exc)
{
Exceptions.LogException(exc);
Console.WriteLine (esim. Viesti);
paluu"";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
yritä
{
Luo UnicodeEncoder muuntamaan tavutaulukon ja merkkijonon välillä.
UnicodeEncoding ByteConverter = uusi UnicodeEncoding();
Luo tavutaulukoita, jotka sisältävät alkuperäistä, salattua ja purettua dataa.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] encryptedData;
byte[] decryptedData;
Luo uusi RSACryptoServiceProvider-instanssi luodaksesi
julkisen ja yksityisen avaimen tiedot.
RSACryptoServiceProvider RSA = uusi RSACryptoServiceProvider();
RSA. FromXmlString (yksityisavain);
Välitä tiedot ENCRYPTille, julkisen avaimen tietoon
(käyttäen RSACryptoServiceProvider.ExportParameters(false),
ja boolean-lippu, jossa ei ole OAEP-pehmustetta.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters(väärin, väärin);
merkkijono base64code = Muunna. ToBase64String(encryptedData);
palauta base64code;
}
catch (poikkeus-exc)
{
Ota tämä poikkeus kiinni, jos salaus teki niin
ei onnistunut.
Exceptions.LogException(exc);
Console.WriteLine (esim. Viesti);
paluu"";
}
}
staticprivatebyte[] RSAEncrypt(
tavu[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
yritä
{
Luo uusi RSACryptoServiceProvider-instanssi.
RSACryptoServiceProvider RSA = uusi RSACryptoServiceProvider();
Tuo RSA-avaimen tiedot. Tämä tarvitsee vain
sisällyttää julkisen avaimen tiedot.
RSA. ImportParameters(RSAKeyInfo);
Salaa ohitettu tavutaulukko ja määritä OAEP-täyte.
OAEP-pehmuste on saatavilla vain Microsoft Windows XP:ssä tai
myöhemmin.
palauta RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Tunnista ja näytä CryptographicException
konsolille.
catch (KryptographicException e)
{
Exceptions.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
byte[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
yritä
{
Luo uusi RSACryptoServiceProvider-instanssi.
RSACryptoServiceProvider RSA = uusi RSACryptoServiceProvider();
Tuo RSA-avaimen tiedot. Tämä vaatii
Sisällyttää yksityisen avaimen tiedot.
RSA. ImportParameters(RSAKeyInfo);
Pura läpikulkenut tavutaulukko ja määritä OAEP-täyte.
OAEP-pehmuste on saatavilla vain Microsoft Windows XP:ssä tai
myöhemmin.
palauta RSA. Decrypt(DataToDecrypt, DoOAEPPadding);
}
Tunnista ja näytä CryptographicException
konsolille.
catch (KryptographicException 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();
- }
Kopioi koodi
|
Edellinen:Rakenna oma henkilökohtainen foorumisi ilmaiseksi, voit ansaita rahaa rakentamalla puolestasi, ja voit tehdä sen kolmessa minuutissaSeuraava:Onclickin ja hrefin käyttö A-tagissa HTML:ssä
|