2011-07-17 77 views
3

方案:我们有一个要发布脱机(DVD-ROM)一个Silverlight 5 OOB应用。此应用程序可用作某些教育内容的媒体播放器。为了保护那些附带DVD ROM的视频文件,我决定用钥匙独特的视频文件进行加密,以每个用户,出货的内容和需要播放时,解密。媒体流和CryptoStream的

问题:它如何逐步解密媒体?我不想在一次解密整个文件的内存和性能问题。 MediaElement支持类型的流的源,但是当我使用CryptoStream解密视频文件,并将其传递给MediaElement.SetSource方法,以下抛出异常:

{System.Windows.Media.DrmException: 3121 3121 An error has occurred. 
    at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData) 
    at MS.Internal.XcpImports.MediaElement_SetStreamSource(MediaElement element, Stream stream) 
    at System.Windows.Controls.MediaElement.SetSource(Stream stream) 
    at SilverlightApplication4.MainPage.button1_Click(Object sender, RoutedEventArgs e) 
    at System.Windows.Controls.Primitives.ButtonBase.OnClick() 
    at System.Windows.Controls.Button.OnClick() 
    at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
    at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) 
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags)} 

我使用AES alorithm为cryptographics操作AesManaged类。

在此先感谢。

+1

如果你打算上存储的AES密钥?如果它在磁盘上与视频一起,你没有真正保护自己。 –

回答

0

你有没有设置MediaElement.SetSource作为加密流或包裹它流?

FileStream stream = new FileStream(“mymedia.avi”, FileMode.Open,FileAccess.Read); 
CryptoStream cs = new CryptoStream(stream, alg.CreateDecryptor(), CryptoStreamMode.Read); 
StreamReader reader = new StreamReader(cs); 

正如有人已经指出,不要将关键存储与产品一起。找到存储在二进制文件中的密钥非常简单。