2011-07-17 19 views
3

シナリオ:オフラインで公開されるSilverlight 5 OOBアプリケーション(DVD ROM)があります。このアプリケーションは、いくつかの教育コンテンツのメディアプレーヤーとして機能します。 DVD ROMに同梱されているビデオファイルを保護するため、各ユーザーに固有のキーでビデオファイルを暗号化し、コンテンツを出荷し、再生が必要なときに解読することに決めました。MediaStreamSourceおよび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); 

誰かがすでに指摘しているように、製品と一緒にキーを保管しないでください。バイナリに格納されたキーを見つけるのは本当に簡単です。