Алгоритм Rijndael и CryptoStream: возможно ли зашифровать / расшифровать многопоточность? - PullRequest
0 голосов
/ 13 декабря 2011

Я использую Rijndael для шифрования / дешифрования некоторых документов. Мне интересно, есть ли реализация для C #, которая позволяет многопоточное использование алгоритма, либо вручную, либо с помощью Parallel framework? Я предполагаю, что это невозможно, потому что он основан на потоках (CryptoStream), но все же стоит спросить. У кого-нибудь есть источники для проверки?

1 Ответ

1 голос
/ 13 декабря 2011

Я никогда не слышал о многопоточном CryptoStream в .NET, однако думаю, что это зависит от вашего режима шифрования. Если режим шифрования ECB, конечно, вы можете легко сделать его многопоточным вручную с помощью Parallel.For или ForEach. С CBC или любым другим режимом шифрования с обратной связью маловероятно, что вы сможете сделать его параллельным, если вы не будете использовать несколько векторов инициализации. Для режима ECB:

  • Разделить ваши данные на несколько байтовых массивов (скажем, вы шифруете 1280 байтов с 10 потоками, которые разбивают данные на 10 байтовых массивов, которые содержат 0,127 байт, 128 ... 2,55 байт и т. Д., Каждый массив должен содержать целое число блоков).
  • Используйте Parallel.For или ForEach для циклического перебора всех 10-байтовых массивов (например, создайте экземпляр List и передайте его Parallel.ForEach в качестве аргумента).
  • Создание 10 экземпляров шифратора / расшифровщика Rijndael с помощью SymmetricAlgorithm.CreateEncryptor / SymmetricAlgorithm.CreateDecryptor
  • Шифровать каждую часть данных в отдельном потоке.
  • Снова объединить данные в массив байтов.

Итак, моя идея не в том, чтобы использовать CryptoStream, вместо этого вы должны вызывать API шифрования и напрямую работать с байтами простого текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...