как использовать RSA для шифрования файлов (огромные данные) в C#

Internet Explorer 8 и ранее не поддерживает парсинг XHTML. Даже если Вы используете определение XML и/или XHTML doctype, старый IE все еще анализируют документ как простой HTML. И в простом HTML, не поддерживается закрывающийся автоматически синтаксис. Запаздывающая наклонная черта просто проигнорирована, необходимо использовать явный закрывающий тэг.

Даже браузеры с поддержкой парсинга XHTML, такой как IE 9 и позже , все еще проанализируют документ как HTML, если Вы не вручите документ с типом содержания XML. Но в этом случае старый IE не отобразит документ вообще!

41
задан ala 29 July 2009 в 09:34
поделиться

5 ответов

Как упоминалось в других ответах, асимметричное шифрование предназначено только для шифрования данных, размер которых меньше размера его ключа.

Один из вариантов, который я реализовал при необходимости передачи больших объемов зашифрованных данных между двумя системами, - это наличие пары ключей RSA, открытый ключ которой известен как отправителю, так и получателю, а затем, когда данные должны быть отправлены, получатель генерирует новая пара ключей RSA, шифрует открытый ключ этой пары с помощью общего открытого ключа и отправляет зашифрованный открытый ключ отправителю. Отправитель расшифровывает открытый ключ получателя, используя свой закрытый ключ (который получателю не нужно знать, так же как отправителю не нужно знать закрытый ключ, созданный получателем), генерирует симметричный ключ шифрования, шифрует данные симметричным ключом. а затем шифрует симметричный ключ, используя открытый ключ, полученный от получателя.

35
ответ дан 27 November 2019 в 00:08
поделиться

RSA может шифровать только блоки данных, которые короче длины ключа, поэтому обычно вы делаете

  1. Сгенерируйте случайный ключ правильной длины, необходимой для AES (или аналогичного).
  2. Зашифруйте свои данные с помощью AES или аналогичного ключ
  3. Зашифруйте случайный ключ, используя свой ключ RSA

Затем вы публикуете оба выхода из 2 и 3

Расшифровать

  1. Расшифруйте ключ AES, используя свой ключ RSA.
  2. Расшифруйте данные с помощью этого ключа AES
60
ответ дан 27 November 2019 в 00:08
поделиться

Реализации RSA в .NET (и все алгоритмы открытого / закрытого ключа) не поддерживают большие блоки данных - потому что это не цель открытого / закрытого ключа.

Вместо этого вы должны сгенерировать новый симметричный ключ и использовать его для шифрования данных. Затем вы используете открытый / закрытый ключ для шифрования симметричного ключа и безопасного обмена им с другой стороной. Затем они расшифровывают симметричный ключ и используют его для расшифровки ваших данных.

8
ответ дан 27 November 2019 в 00:08
поделиться

Обычно RSA используется только для передачи симметричного ключа (например, в начале потока), а затем массив данных шифруется этим ключом.

Асимметричное шифрование недостаточно эффективно для передачи большого количества данных.

21
ответ дан 27 November 2019 в 00:08
поделиться

Для будущих поисков, касающихся исключений неверной длины RSA ...

Вы можете рассчитать максимальное количество байтов, которые могут быть зашифрованы с определенным размером ключа, следующим образом:

((KeySize - 384) / 8) + 37

Однако, если параметр оптимального заполнения асимметричного шифрования (OAEP) истинен, для вычисления максимального количества байтов можно использовать следующее:

((KeySize - 384) / 8) + 7

Законное размеры ключей от 384 до 16384 с размером пропуска 8.

18
ответ дан 27 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: