2012-11-12 5 views
6

Je dois télécharger un gros fichier vidéo et l'enregistrer sur le disque dur. Ensuite, j'ai besoin de lire ce fichier vidéo en utilisant un élément multimédia XAML. Mais le fichier doit être chiffré à l'aide de l'algorithme AES 256 et de la clé de chiffrement. Une donnée non cryptée ne doit pas être écrite sur le disque dur à tout moment.Cryptage de flux WinRT

E.g. Je peux avoir un flux qui peut transformer des données non chiffrées en un fichier et vice-versa.

WinRT a une API qui me permet de crypter des tampons. Mais si le fichier est volumineux, cela ne fonctionnera pas. WinRT a une API qui permet de chiffrer les flux DataProtectionProvider. Mais il y a un paramètre magique protectionDescriptor et je n'ai pas trouvé d'informations sur la façon de spécifier un algorithme et une clé.

Ce que j'ai pu faire est de mettre en œuvre IRandomAccessStream en C#. Cela fonctionne mais c'est lent.

S'il vous plaît ne fournissent pas des réponses qui ne sont pas liées à la plateforme WinRT. Toute autre aide serait appréciée.

+1

Pourriez-vous préciser s'il vous plaît ce que vous entendez par « mettre en œuvre IRandomAccessStream en C# »? Avez-vous trouvé un moyen d'utiliser le cryptage symétrique avec les flux directement? J'utilise une méthode qui lit le flux dans les morceaux, crypte le morceau par morceau et écrit le résultat dans le flux de destination. Cela fonctionne même avec des fichiers très volumineux et n'est pas trop lent. –

+0

J'ai résolu le problème dans ma mise en œuvre. Maintenant, cela fonctionne vite pour les deux opérations: lecture et écriture. –

+0

Il est dommage que vous ne pouvez pas partager le code source. Cela ressemble à une très bonne solution. Pourriez-vous au moins partager quelques informations sur la façon dont vous avez résolu le problème? –

Répondre

0

L'exemple ici: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.security.cryptography.dataprotection.dataprotectionprovider.aspx, vous donne des informations sur ce que protectionDescriptor est, en bref, il identifie l'utilisateur ou d'un groupe ou d'un ordinateur qui fournira la clé pour le chiffrement, dans l'exemple que vous avez:

String strDescriptor = "LOCAL=user"; 

et plus tard:

DataProtectionProvider Provider = new DataProtectionProvider(strDescriptor); 

ce qui signifie que le fournisseur de la clé sera l'utilisateur actuel, pour le look de cette classe, il semble qu'il est destiné à protéger les informations de l'utilisateur, probablement à l'aide propre de l'utilisateur généré certificat et un défaut algorithme, qui ne peut avez overrided, donc si vous cherchez un moyen de expecify explicity une clé et un algorithme, vous pouvez être coincé avec CryptographicEngine

+0

Alors, comment spécifier que j'ai besoin d'AES 256 et d'une clé de chiffrement? –

+0

Avec DataProtectionProvider vous ne pouvez pas le seul moyen est CryptographicEngine, l'API utilisée pour chiffrer les tampons, pour une meilleure compréhension, DataProtectionProvider est semblable à .NET Framework File.Encrypt (http://msdn.microsoft.com/en-us/library /system.io.file.encrypt.aspx). – Rafael

+0

MSDN dit (voir le lien de la question): Vous pouvez protéger les données en utilisant une clé symétrique. Cela fonctionne, par exemple, pour protéger les données à un principal non-AD tel que Live ID. –

0

j'ai pu mettre en œuvre IRandomAccessStream qui encrypte ou décrypte les données à la volée en utilisant AES_CBC_PKCS7 algorithme. Il prend en charge l'écriture séquentielle et la lecture d'accès aléatoire. Malheureusement, je ne peux pas partager le code source.

+0

pourriez-vous au moins nous donner un indice? ou peut-être aider avec https: // stackoverflow.com/questions/28677469/implementation-a-custom-irandomaccessstream? –