2012-11-12 27 views
6

我需要下載一個大的視頻文件並將其保存到硬盤驅動器。 然後,我需要使用XAML媒體元素播放此視頻文件。 但該文件必須使用AES 256算法和加密密鑰進行加密。任何時候都不能將未加密的數據寫入硬盤。WinRT流加密

E.g.我可以有一個可以將未加密的數據轉換爲文件的流,反之亦然。

WinRT有一個API,允許我加密緩衝區。但是,如果文件很大,這將無法正常工作。 WinRT有一個API,允許加密流DataProtectionProvider。但是有一個神奇的protectionDescriptor參數,我沒有找到關於如何指定算法和密鑰的信息。

我能做的就是在C#中實現IRandomAccessStream。它有效,但速度很慢。

請不要提供與WinRT平臺無關的答案。任何其他幫助將不勝感激。

+1

你能否澄清一下你的意思是「在C#中實現IRandomAccessStream」?您是否找到直接使用流對稱加密的方法?我使用一種方法讀取塊中的流,按塊加密塊並將結果寫入目標流。即使是非常大的文件,這也可以工作,速度並不慢。 –

+0

我已經解決了我的實現中的問題。現在它對於讀寫操作都很快。 –

+0

很遺憾你無法分享源代碼。聽起來像是一個非常好的解決方案。你能否至少分享一些信息,你是如何解決問題的? –

回答

0

這裏的例子:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.security.cryptography.dataprotection.dataprotectionprovider.aspx,爲您提供有關protectionDescriptor是什麼,總之,它標識用戶或組或計算機,將提供加密的密鑰,在例如信息,您有:

String strDescriptor = "LOCAL=user"; 

後來:

DataProtectionProvider Provider = new DataProtectionProvider(strDescriptor); 

這意味着,關鍵的供應商將是當前用戶,這個類的外觀看來,它旨在保護用戶的信息,可能使用用戶自己生成的證書和一個默認算法,它不能被overrided,所以如果你尋找一種明確的方式來指定一個密鑰和一個算法,你可能會被卡住CryptographicEngine

+0

那麼如何指定我需要AES 256和加密密鑰? –

+0

使用DataProtectionProvider,您不能唯一的方法是CryptographicEngine,用於加密緩衝區的API,以便更好地理解,DataProtectionProvider類似於.NET Framework File.Encrypt(http://msdn.microsoft.com/zh-cn/library /system.io.file.encrypt.aspx)。 – Rafael

+0

MSDN說(請參閱問題的鏈接):您可以通過使用對稱密鑰來保護數據。例如,這可用於將數據保護到非AD主體(如Live ID)。 –

0

我能夠實現IRandomAccessStream來動態地加密或解密數據AES_CBC_PKCS7算法。它支持順序寫入和隨機讀取。 不幸的是,我無法分享源代碼。

+0

你能否至少給我們一個線索?或者可以幫助https:// stackoverflow。com/questions/28677469 /實現-a-custom-irandomaccessstream? –