2009-10-01 2 views
4

Я работаю над решением, которое необходимо расшифровать зашифрованные данные PKCS # 7, предпочтительно на C#. Насколько я понимаю, .NET api поддерживает это через пространство имен System.Security.Cryptography.Pkcs. Однако кажется, что реализация может работать только на байт-массивах. Итак, что мне делать, когда у меня есть большой зашифрованный файл, который не вписывается в память?Расшифровка зашифрованных данных PKCS # 7 в C#

Я что-то упустил, или есть ли другой способ сделать это на уровне потока вместо использования bytearrays?

ответ

5

Каркас .NET имеет только элементарную поддержку PKCS # 7/CMS, поэтому он не поддерживает потоковую передачу данных.

Вам нужна сторонняя библиотека. Как отмечали другие, BouncyCastle - отличный выбор. Он поддерживает PKCS # 7 (PKCS # 7 также известен как CMS).

Их тесты, вероятно, являются хорошим местом для поиска кода примера: EnvelopedDataStreamTest.cs.

+0

А, я не знал о версии C#. Я использовал его в Java несколько лет назад, и я знаю, что он поддерживает PKCS # 7 в этой версии. Странно, я не нашел этого, когда гуглинг. Однако, спасибо за указание :-) –

1

Я нашел an example как расшифровать PKCS # 7 в C#. Этого может быть достаточно, чтобы вы начали.

+0

Единственная проблема заключается в том, что ваш пример, похоже, работает с файлом, а не расшифровывает поток. –

+1

Кроме того, Chilkat является коммерческим, но BouncyCastle является открытым исходным кодом и бесплатным. –

0

У вас есть возможность изменить на использование BouncyCastle API от http://www.bouncycastle.org/csharp/, так как он использует потоки для дешифрования.

Но, я не думаю, что он может использовать зашифрованные данные PKCS # 7, поэтому вам также потребуется использовать BouncyCastle для шифрования.

Ниже приведен пример использования этого API: http://elian.co.uk/post/2009/07/29/Bouncy-Castle-CSharp.aspx

Если вы хотите использовать .NET материал, это может быть полезно: http://www.geekpedia.com/tutorial227_Encrypting-and-Decrypting-Files-with-Csharp.html

+0

Bouncy Castle для C# действительно может шифровать и расшифровывать, используя схему PKCS # 7. Однако они называют это CMS (Cryptographic Messaging Syntax), который определяет PKCS # 7. Поэтому использование Bouncy Castle для решения этой проблемы отлично работало. –

+0

@Johnny Egeland - Спасибо, я не понимал, что PKCS # 7 == CMS –

1

.Net Framework 2.0 предоставляет пространство имен pkcs, которое помогает нам делать знак/шифровать/расшифровывать в стандарте pkcs # 7. Пожалуйста, обратитесь к обзору http://msdn.microsoft.com/en-us/library/bb885086.aspx и здесь для хорошего примера http: ** msdn.microsoft.com/en-us/library/bb924565.aspx.

Смежные вопросы