簡體   English   中英

MediaStreamSource 和 CryptoStream

[英]MediaStreamSource and CryptoStream

場景:我們有一個 silverlight 5 OOB 應用程序將離線發布(DVD ROM)。 此應用程序用作某些教育內容的媒體播放器。 為了保護 DVD ROM 隨附的視頻文件,我決定使用每個用戶唯一的密鑰加密視頻文件,發送內容並在需要播放時對其進行解密。

問題:如何逐步解密媒體? 由於 memory 和性能問題,我不想一次解密整個文件。 MediaElement支持 stream 類型的源,但是當我使用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 算法是AesManaged class 進行加密操作。

提前致謝。

您是否將 MediaElement.SetSource 設置為加密 stream 或包裝它的 stream?

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

正如有人已經指出的那樣,不要將密鑰與產品一起存儲。 找到存儲在二進制文件中的密鑰真的很容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM