|
|
Veröffentlicht am 04.11.2015 12:37:23
|
|
|

Die Projektanforderungen sind: einen privaten und öffentlichen Schlüssel generieren, mit öffentlichem Schlüssel verschlüsseln, mit privatem Schlüssel entschlüsseln, ich habe es so implementiert,
Ich hoffe, Freunden helfen zu können, die dieses Bedürfnis haben.
Der Quellcode ist wie folgt:
1. Erzeugen Sie ein Schlüsselpaar:
/// <summary> Private Key und Public Key ARR[0] für private Schlüssel arr[1] für Public Key generieren /// </summary> /// <returns></returns> öffentliche statische Zeichenkette[] GenerateKeys() { string[] sKeys = neuer String[2]; RSACryptoServiceProvider rsa = neuer RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString(true); sKeys[1] = rsa. ToXmlString (falsch); sKeys zurück; }
2. Verschlüsselung:
/// <summary> RSA-Verschlüsselung /// </summary> <param name="sSource" >Source-String</param> <param name="sPublicKey" >Public Key</param> /// <returns></returns> öffentliche statische Zeichenkette EncryptString (String sSource,String sPublicKey) { RSACryptoServiceProvider rsa = neuer RSACryptoServiceProvider(); String-Klartext = sSource; RSA. FromXmlString (sPublicKey); Byte[] Chiffrebytes; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(Klartext), falsch);
StringBuilder sbString = neuer StringBuilder(); für (int i = 0; Ich < Cipherbytes. Länge; i++) { sbString.Append(zipherbytes)+ ","); }
3. Entschlüsselung:
/// <summary> RSA-Entschlüsselung /// </summary> <param name="sSource">Source-String</param> <param name="sPrivateKey">Private Key</param> /// <returns></returns> öffentliche statische Zeichenkette DecryptString(String sSource, String sPrivateKey) { RSACryptoServiceProvider rsa = neuer RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(',');
für (int j = 0; j < sBytes.Length; j++) { wenn (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } byte[] plaintbytes = rsa. Entschlüsseln (byteEn, falsch); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
RSA-Verschlüsselungs- und Entschlüsselungscode:
mit System; mit System.Collections.Generic; mit System.Linq; mit System.Text; unter Verwendung von System.Security.Cryptography;
Namensraum MyRSA Namensraum 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)
{
Versuch es
{
Erstellen Sie einen UnicodeEncoder, um zwischen Byte-Array und String zu konvertieren.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Erstellen Sie eine neue Instanz von RSACryptoServiceProvider zur Generierung
öffentliche und private Schlüsseldaten.
RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();
RSA. FromXmlString (privatSchlüssel);
byte[] verschlüsselte Daten;
byte[] decryptedData;
encryptedData = Convert.FromBase64String(base64code);
Geben Sie die Daten an DECRYPT, die privaten Schlüsselinformationen weiter.
(unter Verwendung von RSACryptoServiceProvider.ExportParameters(true),
und eine boolesche Flagge, die keine OAEP-Polsterung angibt.
decryptedData = RSADecrypt(
verschlüsselte Daten, RSA. ExportParameters(true), false);
Zeigen Sie den entschlüsselten Klartext der Konsole an.
return ByteConverter.GetString (decryptedData);
}
Catch (Ausnahme außer)
{
Ausnahmen.LogException (u.a.);
Console.WriteLine (z. B. Botschaft);
zurückkehren"";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
Versuch es
{
Erstellen Sie einen UnicodeEncoder, um zwischen Byte-Array und String zu konvertieren.
UnicodeEncoding ByteConverter =new UnicodeEncoding();
Erstellen Sie Byte-Arrays, um originale, verschlüsselte und entschlüsselte Daten zu speichern.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] verschlüsselte Daten;
byte[] decryptedData;
Erstellen Sie eine neue Instanz von RSACryptoServiceProvider zur Generierung
öffentliche und private Schlüsseldaten.
RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();
RSA. FromXmlString (privatSchlüssel);
Geben Sie die Daten an ENCRYPT, die öffentlichen Schlüsselinformationen, weiter.
(unter Verwendung von RSACryptoServiceProvider.ExportParameters(false),
und eine boolesche Flagge, die keine OAEP-Polsterung angibt.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters(false), false);
String base64code = Convert.ToBase64String(encryptedData);
Geben Sie base64code zurück;
}
Catch (Ausnahme außer)
{
Fangen Sie diese Ausnahme auf, falls die Verschlüsselung es getan hat
nicht erfolgreich sein.
Ausnahmen.LogException (u.a.);
Console.WriteLine (z. B. Botschaft);
zurückkehren"";
}
}
staticprivatebyte[] RSAEncrypt(
byte[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Versuch es
{
Erstelle eine neue Instanz von RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();
Importiere die RSA-Schlüsselinformationen. Das braucht nur
um die öffentlichen Schlüsselinformationen einzubeziehen.
RSA. ImportParameters(RSAKeyInfo);
Verschlüssele das passierte Byte-Array und spezifiziere OAEP-Padding.
OAEP-Polsterung ist nur unter Microsoft Windows XP oder
Später.
RSA zurück. Verschlüsseln (DataToEncrypt, DoOAEPPadding);
}
Fangen und zeigen Sie eine CryptographicException an
zur Konsole.
catch (CryptographicException e)
{
Ausnahmen.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
byte[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Versuch es
{
Erstelle eine neue Instanz von RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();
Importiere die RSA-Schlüsselinformationen. Das braucht
um die privaten Schlüsselinformationen einzubeziehen.
RSA. ImportParameters(RSAKeyInfo);
Entschlüsseln Sie das passierte Byte-Array und spezifizieren Sie OAEP-Padding.
OAEP-Polsterung ist nur unter Microsoft Windows XP oder
Später.
RSA zurück. Entschlüsseln (DataToDecrypt, DoOAEPPadding);
}
Fangen und zeigen Sie eine CryptographicException an
zur Konsole.
catch (CryptographicException e)
{
Ausnahmen.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();
- }
Code kopieren
|
Vorhergehend:Erstelle dein eigenes persönliches Forum kostenlos, du kannst Geld verdienen, indem du für dich aufbaust, und das in drei MinutenNächster:Verwendung von onclick und href im A-Tag im HTML
|