2012-11-12 14 views
6

Potrzebuję pobrać duży plik wideo i zapisać go na dysku twardym. Następnie należy odtworzyć ten plik wideo, używając elementu multimedialnego XAML. Plik musi być jednak zaszyfrowany przy użyciu algorytmu AES 256 i klucza szyfrowania. Nieszyfrowane dane nie mogą być zapisywane na dysku twardym w żadnym momencie.Szyfrowanie strumienia WinRT

E.g. Mogę mieć strumień, który może przekształcić niezaszyfrowane dane w plik i na odwrót.

WinRT ma API, który pozwala mi szyfrować bufory. Ale jeśli plik jest duży, to nie zadziała. WinRT ma API, które pozwala szyfrować strumienie DataProtectionProvider. Ale istnieje magiczny parametr protectionDescriptor i nie znalazłem informacji o tym, jak określić algorytm i klucz.

To, co udało mi się zrobić, to zaimplementować IRandomAccessStream w języku C#. Działa, ale działa wolno.

Proszę nie udzielać odpowiedzi, które nie są związane z platformą WinRT. Każda inna pomoc byłaby doceniona.

+1

Czy możesz wyjaśnić, co masz na myśli mówiąc o "implementacji IRandomAccessStream w języku C#"? Czy znalazłeś sposób na bezpośrednie użycie szyfrowania symetrycznego w strumieniach? Używam metody, która czyta strumień w porcjach, szyfruje porcję przez porcję i zapisuje wynik do strumienia docelowego. Działa to nawet w przypadku bardzo dużych plików i nie jest zbyt powolne. –

+0

Rozwiązałem problem w mojej implementacji. Teraz działa szybko zarówno dla operacji odczytu i zapisu. –

+0

Szkoda, że ​​nie można udostępnić kodu źródłowego. Brzmi jak bardzo dobre rozwiązanie. Czy mógłbyś chociaż podzielić się niektórymi informacjami, w jaki sposób rozwiązałeś problem? –

Odpowiedz

0

Przykład tutaj: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.security.cryptography.dataprotection.dataprotectionprovider.aspx, daje informacje o tym co protectionDescriptor jest, krótko mówiąc, to zidentyfikować użytkownika lub grupę lub komputer, który zapewni klucz szyfrowania, w tym przykładzie masz:

String strDescriptor = "LOCAL=user"; 

i później:

DataProtectionProvider Provider = new DataProtectionProvider(strDescriptor); 

co oznacza, że ​​dostawcy klucza będzie obecny użytkownik, na wygląd tej klasy wydaje się, że jest przeznaczony do ochrony informacji użytkownika, prawdopodobnie przy użyciu własnego wygenerowany certyfikat użytkownika i domyślne Algorytm, który nie może już overrided, więc jeśli spojrzeć na sposób jawnie expecify klucza oraz algorytmu, może być zatrzymany z CryptographicEngine

+0

Jak określić, że potrzebuję klucza AES 256 i klucza szyfrowania? –

+0

Z DataProtectionProvider nie można jedynym sposobem jest CryptographicEngine, API służący do szyfrowania buforów, dla lepszego zrozumienia, DataProtectionProvider jest zbliżony do .NET Framework File.Encrypt (http://msdn.microsoft.com/en-us/library /system.io.file.encrypt.aspx). – Rafael

+0

MSDN mówi (patrz link z pytania): Możesz chronić dane za pomocą klucza symetrycznego. Działa to na przykład w celu ochrony danych do podmiotu nie będącego AD, takiego jak identyfikator Live ID. –

0

udało mi się wdrożyć IRandomAccessStream który szyfruje lub odszyfrowuje dane w locie za pomocą Algorytm AES_CBC_PKCS7. Obsługuje zapisywanie sekwencyjne i czytanie z dostępem swobodnym. Niestety nie mogę udostępnić kodu źródłowego.

+0

czy możesz nam dać choć jedną wskazówkę? lub może pomóc w https: // stackoverflow.com/questions/28677469/implementation-a-custom-irandomaccessstream? –