|
|
Публикувано в 4.11.2015 г. 12:37:23 ч.
|
|
|

Проектът изисква: генериране на частен и публичен ключ, криптиране с публичен ключ, декриптиране с частен ключ, реализирах го така,
Надявам се да бъда полезен на приятели, които имат тази нужда.
Изходният код е следният:
1. Генериране на двойка ключове:
/// <summary> генерирай частен ключ и публичен ключ arr[0] за частен ключ arr[1] за публичен ключ /// </summary> /// <returns></returns> публичен статичен низ[] GenerateKeys() { string[] sKeys = нова струна[2]; RSACryptoServiceProvider rsa = нов RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString(true); sKeys[1] = rsa. ToXmlString(false); връщане на ключове; }
2. Криптиране:
/// <summary> RSA Криптиране /// </summary> <param name="sSource" >Изходен низ</param> <param name="sPublicKey" >публичен ключ</param> /// <returns></returns> публичен статичен низ EncryptString(низ sSource,низ sPublicKey) { RSACryptoServiceProvider rsa = нов RSACryptoServiceProvider(); string plaintext = sSource; RSA. FromXmlString(sPublicKey); byte[] cipherbytes; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(открит текст), false);
StringBuilder sbString = нов StringBuilder(); за (int i = 0; Аз < cipherbytes. Дължина; i++) { sbString.Append(cipherbytes+ ","); }
3. Декриптиране:
/// <summary> RSA Декрипт /// </summary> <param name="sSource">Изходен низ</param> <param name="sPrivateKey">Private Key</param> /// <returns></returns> public static string DecryptString(String sSource, низ sPrivateKey) { RSACryptoServiceProvider rsa = нов RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(',');
за (int j = 0; j < sBytes.Length; j++) { ако (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } байт[] жалоби = rsa. Decrypt(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
Изходен код за криптиране и декриптиране на RSA:
използвайки System; използвайки System.Collections.Generic; използвайки System.Linq; използвайки System.Text; използвайки System.Security.Cryptography;
пространството за имена MyRSA пространството за имена MyRSA
{
публична класа 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)
{
Опитай
{
Създайте UnicodeEncoder за конвертиране между байтов масив и низ.
UnicodeEncoding ByteConverter =нов UnicodeEncoding();
Създайте нов инстанс на RSACryptoServiceProvider за генериране
Публични и частни ключови данни.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString(privateKey);
byte[] encryptedData;
byte[] decryptedData;
encryptedData = Convert.FromBase64String(base64code);
Предайте данните към DECRYPT, информацията за частния ключ
(използвайки RSACryptoServiceProvider.ExportParameters(true),
и булев флаг, който показва липса на OAEP.
decryptedData = RSADecrypt(
криптирани данни, RSA. ExportParameters (true), false);
Покажи декриптирания открит текст на конзолата.
return ByteConverter.GetString(decryptedData);
}
catch (Изключение с изключение)
{
Exceptions.LogException(exc);
Console.WriteLine(exc. Message);
връщане";
}
}
staticpublicstring Encrypt(низ toEncryptString)
{
Опитай
{
Създайте UnicodeEncoder за конвертиране между байтов масив и низ.
UnicodeEncoding ByteConverter =нов UnicodeEncoding();
Създайте байтови масиви за съхранение на оригинални, криптирани и декриптирани данни.
байт[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] encryptedData;
byte[] decryptedData;
Създайте нов инстанс на RSACryptoServiceProvider за генериране
Публични и частни ключови данни.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString(privateKey);
Предайте данните на ENCRYPT, информацията за публичния ключ
(използвайки RSACryptoServiceProvider.ExportParameters(false),
и булев флаг, който показва липса на OAEP.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters (false), false);
низ base64code = Convert.ToBase64String(encryptedData);
return base64code;
}
catch (Изключение с изключение)
{
Хванете това изключение, в случай че криптирането е направено
Да не успее.
Exceptions.LogException(exc);
Console.WriteLine(exc. Message);
връщане";
}
}
staticprivatebyte[] RSAEncrypt(
байт[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Опитай
{
Създайте нов инстанция на RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Импортирайте информацията за RSA Key. Това е достатъчно само
да включи информацията за публичния ключ.
RSA. ImportParameters (RSAKeyInfo);
Криптирайте подадения байтов масив и задайте OAEP допълване.
OAEP подпълването е налично само за Microsoft Windows XP или
По-късно.
Връщане на RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Захващане и показване на CryptographicException
към конзолата.
catch (CryptographicException e)
{
Exceptions.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
байт[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadding)
{
Опитай
{
Създайте нов инстанция на RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Импортирайте информацията за RSA Key. Това се нуждае от
да включи информация за частния ключ.
RSA. ImportParameters (RSAKeyInfo);
Декриптирайте подадения байтов масив и задайте OAEP подсилване.
OAEP подпълването е налично само за Microsoft Windows XP или
По-късно.
Връщане на RSA. Decrypt(DataToDecrypt, DoOAEPPadding);
}
Захващане и показване на CryptographicException
към конзолата.
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();
- }
Копирай код
|
Предишен:Създайте собствен личен форум безплатно, можете да печелите пари, като градите от ваше име, и можете да го направите за три минутиСледващ:Използване на onclick и href в A таг в HTML
|