|
|
Опубліковано 04.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(неправди); return sKeys; }
2. Шифрування:
/// <summary> /// RSA Encrypt /// </summary> <param name="sSource" >Вихідний рядок</param> <param name="sPublicKey" >публічний ключ</param> /// <returns></returns> публічний статичний рядок EncryptString(рядок sSource,рядок sPublicKey) { RSACryptoServiceProvider rsa = новий RSACryptoServiceProvider(); string opentext = sSource; RSA. FromXmlString(sPublicKey); байт[] шифробайтів; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), неправда); Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(відкритий текст), неправда);
StringBuilder sbString = новий StringBuilder(); для (int i = 0; Я < шифробайтами. Довжина; i++) { sbString.Append(cipherbytes+ ","); }
3. Розшифрування:
/// <summary> Розшифрування RSA /// </summary> <param name="sSource">Рядок джерела</param> <param name="sPrivateKey">Приватний ключ</param> /// <returns></returns> публічний статичний рядок DecryptString(String sSource, рядок sPrivateKey) { RSACryptoServiceProvider rsa = новий RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), неправда); string[] sBytes = sSource.Split(',');
для (int j = 0; j < sBytes.Довжина; j++) { if (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } байт[] Plaintbytes = RSA. Decrypt(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } повернути 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 =new 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 (виключно з виключенням)
{
Винятки.LogException(exc);
Console.WriteLine(exc. Повідомлення);
повернутися";
}
}
staticpublicstring Encrypt(string toEncryptString)
{
спробуйте
{
Створіть UnicodeEncoder для конвертації між масивом байтів і рядком.
UnicodeEncoding ByteConverter =new 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 (неправда), хибна);
string base64code = Convert.ToBase64String(encryptedData);
повернути base64code;
}
catch (виключно з виключенням)
{
Зафіксуйте цей виняток на випадок, якщо шифрування спрацювало
не досягти успіху.
Винятки.LogException(exc);
Console.WriteLine(exc. Повідомлення);
повернутися";
}
}
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)
{
Винятки.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)
{
Винятки.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
|