Алгоритм шифрования RSA - C# (185660)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Столкнулся со следующей проблемой: Пытаюсь реализовать алгоритм шифрования RSA, нахожу все значения которые нужны для составления открытого и закрытого ключа. Затем мне необходимо номер UNICODE'а каждого символа введенного в текстбокс1 записать в массив и применить к каждому номеру UNICODE'а алгоритм RSA. Далее, записать новое значение символов в текстбокс2. Подскажите как это правильно реализовать или посоветуйте другой вариант решения этой проблемы. Заранее спасибо!

Решение задачи: «Алгоритм шифрования RSA»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Security.Cryptography;
  6. using System.Collections;
  7.  
  8. namespace WindowsFormsApplication2
  9. {
  10.     class Class1
  11.     {
  12.         public string EncryptString(string inputString, int dwKeySize)
  13.         {
  14.             // TODO: Add Proper Exception Handlers
  15.             RSACryptoServiceProvider rsaCryptoServiceProvider =
  16.                                           new RSACryptoServiceProvider(dwKeySize);
  17.            // rsaCryptoServiceProvider.FromXmlString(xmlString);
  18.             int keySize = dwKeySize / 8;
  19.             byte[] bytes = Encoding.UTF32.GetBytes(inputString);
  20.             // The hash function in use by the .NET RSACryptoServiceProvider here
  21.             // is SHA1
  22.             // int maxLength = ( keySize ) - 2 -
  23.             //              ( 2 * SHA1.Create().ComputeHash( rawBytes ).Length );
  24.             int maxLength = keySize - 42;
  25.             int dataLength = bytes.Length;
  26.             int iterations = dataLength / maxLength;
  27.             StringBuilder stringBuilder = new StringBuilder();
  28.             for (int i = 0; i <= iterations; i++)
  29.             {
  30.                 byte[] tempBytes = new byte[
  31.                         (dataLength - maxLength * i > maxLength) ? maxLength :
  32.                                                       dataLength - maxLength * i];
  33.                 Buffer.BlockCopy(bytes, maxLength * i, tempBytes, 0,
  34.                                   tempBytes.Length);
  35.                 byte[] encryptedBytes = rsaCryptoServiceProvider.Encrypt(tempBytes,
  36.                                                                           true);
  37.                 // Обратите внимание, что RSACryptoServiceProvider меняет порядок
  38.                 // зашифрованных байт. Он делает это после шифрования и перед
  39.                 // дешифровкой. Если Вам не нужна совместимость с Microsoft
  40.                 // Cryptographic API (CAPI) или другими поставщиками, то закомментируйте
  41.                 // следующую строку и соотвтетствующую строчку в функции DecryptString.
  42.                 //Array.Reverse(encryptedBytes);
  43.                 // Зачем конвертировать в base 64?
  44.                 // Потому что это одно из основных печатных оснований использующих только
  45.                 // символы ASCII
  46.                 stringBuilder.Append(Convert.ToBase64String(encryptedBytes));
  47.             }
  48.             return stringBuilder.ToString();
  49.         }
  50.  
  51.         public string DecryptString(string inputString, int dwKeySize)
  52.         {
  53.             // TODO: Add Proper Exception Handlers
  54.             RSACryptoServiceProvider rsaCryptoServiceProvider
  55.                                      = new RSACryptoServiceProvider(dwKeySize);
  56.            // rsaCryptoServiceProvider.FromXmlString(xmlString);
  57.             int base64BlockSize = ((dwKeySize / 8) % 3 != 0) ?
  58.               (((dwKeySize / 8) / 3) * 4) + 4 : ((dwKeySize / 8) / 3) * 4;
  59.             int iterations = inputString.Length / base64BlockSize;
  60.             ArrayList arrayList = new ArrayList();
  61.             for (int i = 0; i < iterations; i++)
  62.             {
  63.                 byte[] encryptedBytes = Convert.FromBase64String(
  64.                      inputString.Substring(base64BlockSize * i, base64BlockSize));
  65.                 // Обратите внимание, что RSACryptoServiceProvider меняет порядок
  66.                 // зашифрованных байт. Он делает это после шифрования и перед
  67.                 // дешифровкой. Если Вам не нужна совместимость с Microsoft
  68.                 // Cryptographic API (CAPI) или другими поставщиками, то закомментируйте
  69.                 // следующую строку и соотвтетствующую строчку в функции EncryptString.
  70.                // Array.Reverse(encryptedBytes);
  71.                 arrayList.AddRange(rsaCryptoServiceProvider.Decrypt(
  72.                                     encryptedBytes, true));
  73.             }
  74.             return Encoding.UTF32.GetString(arrayList.ToArray(
  75.                                       Type.GetType("System.Byte")) as byte[]);
  76.         }
  77.     }
  78. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут