2012-11-12 13 views
6

Ho bisogno di scaricare un file video di grandi dimensioni e salvarlo sul disco rigido. Quindi ho bisogno di riprodurre questo file video utilizzando un elemento multimediale XAML. Ma il file deve essere crittografato utilizzando l'algoritmo AES 256 e la chiave di crittografia. I dati non crittografati non devono essere scritti sul disco rigido in qualsiasi momento.Codifica stream WinRT

E.g. Posso avere uno stream in grado di trasformare dati non crittografati in un file e viceversa.

WinRT ha uno API che consente di crittografare i buffer. Ma se il file è grande, questo non funzionerà. WinRT ha un'API che consente di crittografare i flussi DataProtectionProvider. Ma esiste un parametro magico di protezioneDescriptor e non ho trovato alcuna informazione su come specificare un algoritmo e una chiave.

Quello che ero in grado di fare è implementare IRandomAccessStream in C#. Funziona ma è lento.

Si prega di non fornire risposte non correlate alla piattaforma WinRT. Qualsiasi altro aiuto sarebbe apprezzato.

+1

Potrebbe chiarire cosa intendi con "implementare IRandomAccessStream in C#"? Hai trovato un modo per utilizzare la crittografia simmetrica con flussi direttamente? Io uso un metodo che legge lo stream in blocchi, crittografa un chunk di chunk e scrive il risultato nel flusso di destinazione. Funziona anche con file molto grandi e non è troppo lento. –

+0

Ho risolto il problema nella mia implementazione. Ora funziona velocemente per entrambe: operazioni di lettura e scrittura. –

+0

È un peccato che non si possa condividere il codice sorgente. Sembra un'ottima soluzione. Potresti almeno condividere alcune informazioni su come hai risolto il problema? –

risposta

0

L'esempio qui: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.security.cryptography.dataprotection.dataprotectionprovider.aspx, ti dà le informazioni su ciò che protectionDescriptor è, in breve, è identificare l'utente o il gruppo o un computer che fornirà la chiave per la crittografia, nell'esempio si dispone:

String strDescriptor = "LOCAL=user"; 

e più tardi:

DataProtectionProvider Provider = new DataProtectionProvider(strDescriptor); 

il che significa che il fornitore della chiave sarà l'utente corrente, per il look di questa classe sembra che è destinato per proteggere le informazioni degli utenti, probabilmente utilizzando un certificato generato dell'utente e un default algoritmo, che non può essere sovrascritto, quindi se cerchi un modo per esplicitare una chiave e un algoritmo, potresti essere bloccato con CryptographicEngine

+0

Quindi, come specificare che ho bisogno di AES 256 e una chiave di crittografia? –

+0

Con DataProtectionProvider non è possibile l'unico modo è CryptographicEngine, l'API utilizzata per crittografare i buffer, per una migliore comprensione, DataProtectionProvider è simile a .NET Framework File.Encrypt (http://msdn.microsoft.com/en-us/library /system.io.file.encrypt.aspx). – Rafael

+0

MSDN dice (vedere il collegamento dalla domanda): è possibile proteggere i dati utilizzando una chiave simmetrica. Ciò funziona, ad esempio, per proteggere i dati su un principal non AD come Live ID. –

0

Sono stato in grado di implementare IRandomAccessStream che crittografa o decodifica i dati al volo usando Algoritmo AES_CBC_PKCS7. Supporta la scrittura sequenziale e la lettura ad accesso casuale. Purtroppo non posso condividere il codice sorgente.

+0

potresti almeno darci un indizio? o forse aiuto con https: // StackOverflow.it/questions/28677469/implementation-a-custom-irandomaccessstream? –