日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转)

發布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?
1. DRM介紹:

DRM,英文全稱Digital Rights Management, 可以翻譯為:內容數字版權加密保護技術。

DRM技術的工作原理是,首先建立數字節目授權中心。編碼壓縮后的數字節目內容,可以利用密鑰(Key)進行加密保護(lock),加密的數字節目頭部存放著KeyID和節目授權中心的URL。用戶在點播時,根據節目頭部的KeyID和URL信息,就可以通過數字節目授權中心的驗證授權后送出相關的密鑰解密(unlock),節目方可播放。

需要保護的節目被加密,即使被用戶下載保存,沒有得到數字節目授權中心的驗證授權也無法播放,從而嚴密地保護了節目的版權。

?

2. 安裝SDK:

SDK下載

?

3. 去微軟的網站注冊以保證獲得許可授權:

網站地址:http://licenseserver.windowsmedia.com/registration.asp?v2=true

填寫郵箱、公司、國家等信息進行提交。

稍候你的郵箱會收到一封郵件,點擊郵件里的地址,輸入你的郵箱和郵件里收到的token。

?

3. 現在就要開始打包程序的編寫了,在以下的例子中用WinForm程序實現

DRM打包需要公鑰、私鑰還有種子,我們只要新建一個文本文件,然后將如下代碼復制進去

Dim WSHShell Set WSHShell = WScript.CreateObject("WScript.Shell")dim keysobjs dim privkey dim pubkey dim seedSet keysobj= CreateObject("wmrmobjs.WMRMKeys") keysobj.GenerateSigningKeys privkey, pubkey seed = keysobj.GenerateSeed() Dim cmd' Write the private key to privkey.txt. cmd = "command.com /C echo " + privkey + " > privkey.txt" WSHShell.Run cmd,0'Write the public key to pubkey.txt. cmd = "command.com /C echo " + pubkey + " > pubkey.txt" WSHShell.Run cmd,0' Write the license key seed to seed.txt. cmd = "command.com /C echo " + seed + " > seed.txt" WSHShell.Run cmd,0

?

將文本文檔更改為.vbs文件,運行該文件,會在本目錄下形成PRIVKEY.TXT、PUBKEY.TXT、SEED.TXT三個文件,其中PRIVKEY.TXT中是私鑰、PUBKEY.TXT中是公鑰、SEED.TXT中是種子。

?

新建WinForm工程,添加對WMRMObjs.dll的引用,如果SDK安裝成功的話,在SDK安裝目錄的Bin目錄下可以找到。

?

將生成的公鑰、私鑰和種子在配置文件內進行配置

App.config

<?xml version="1.0" encoding="utf-8" ?> <configuration><appSettings><!-- 私鑰 --><add key="PrivateKey" value="!qYNXRckn69VzoSNmGJ9umMfgSw=" /><!-- 公鑰 --><add key="PublicKey" value="R76wg3M2nq3yDRWWI2hFESO*zRXNo2qcNdeVocH7cjwBSN!WnOi8Gg==" /><!-- 種子 --><add key="Seed" value="eQ50hSVGytB3IEr0Tr6UAUMEVlJfcD9XObjE8UhP" /><!-- License獲取頁面URL --><add key="LicenseAcpURL" value="http://localhost:8080/GetLicense.aspx" /></appSettings> </configuration>

?

?

WinForm界面,這里簡單畫一個界面,界面上包括一個用來顯示選擇文件的本文框,選擇文件按鈕,開始打包按鈕和一個OpenFileDialog控件,在OpenFileDialog控件的Filter屬性內加上“支持DRM加密文件|*.WMV;*.WMA;*.ASF;*.WMS”

VideoDRMPackageForm.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace VideoDRMPackageApplication {public partial class VideoDRMPackageForm : Form{public VideoDRMPackageForm(){InitializeComponent();}/// <summary>/// 選擇文件/// </summary>/// <param name="sender"></param>/// <param name="e"></param> private void btnSelectFile_Click(object sender, EventArgs e){openVideoFile.ShowDialog();}/// <summary>/// 開始打包/// </summary>/// <param name="sender"></param>/// <param name="e"></param> private void btnBeginPackage_Click(object sender, EventArgs e){//檢查是否選擇了文件 if (String.IsNullOrEmpty(txtFilePath.Text)){MessageBox.Show("請選擇要進行打包的文件!", "提示");return;}//打包Key string keyID = "DRMTest";//消息 string msg = "";if (Package.PackageVideoFile(keyID, txtFilePath.Text, out msg))msg = "打包成功!" + msg;elsemsg = "打包失敗!" + msg;MessageBox.Show(msg, "提示");}/// <summary>/// 文件選擇完成/// </summary>/// <param name="sender"></param>/// <param name="e"></param> private void openVideoFile_FileOk(object sender, CancelEventArgs e){txtFilePath.Text = openVideoFile.FileName;}} }

?

Package.cs

using System; using System.IO; using System.Configuration; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using WMRMOBJSLib; using System.Runtime; using System.Runtime.InteropServices;namespace VideoDRMPackageApplication {public class Package{/// <summary>/// 打包視頻文件/// </summary>/// <param name="keyID">用于打包的Key</param>/// <param name="sourcePath">打包文件地址</param>/// <param name="msg">輸出消息</param>/// <returns>返回打包結果:true-成功,false-失敗</returns> public static bool PackageVideoFile(string keyID, string sourcePath, out string msg){//創建WMRMHeaderClass對象 WMRMOBJSLib.WMRMHeaderClass myWMRMHeaderClass = new WMRMOBJSLib.WMRMHeaderClass();//創建WMRMProtectClass對象 WMRMOBJSLib.WMRMProtectClass myWMRMProtectClass = new WMRMOBJSLib.WMRMProtectClass();//生成DRM加密后文件路徑,在源文件名后加上_DRM,和源文件放在同一目錄 string drmFilePath = Path.GetDirectoryName(sourcePath) + Path.GetFileNameWithoutExtension(sourcePath) + "_DRM" + Path.GetExtension(sourcePath);try{//從配置文件內獲得私鑰、公鑰、種子和后發放License獲取URL地址 string privateKey = ConfigurationManager.AppSettings["PrivateKey"];string publicKey = ConfigurationManager.AppSettings["PublicKey"];string seed = ConfigurationManager.AppSettings["Seed"];string licenseAcpUrl = ConfigurationManager.AppSettings["LicenseAcpUrl"];//創建用于DRM加密的Key string drmKey = KeyGenerate(keyID, seed);//給myWMRMHeaderClass對象賦值 myWMRMHeaderClass.KeyID = keyID;myWMRMHeaderClass.IndividualizedVersion = "2.2";myWMRMHeaderClass.ContentID = keyID;myWMRMHeaderClass.LicenseAcqURL = licenseAcpUrl;myWMRMHeaderClass.SetCheckSum(drmKey);myWMRMHeaderClass.Sign(privateKey);myWMRMProtectClass.Header = myWMRMHeaderClass.Header;myWMRMProtectClass.InputFile = sourcePath;myWMRMProtectClass.Key = drmKey;myWMRMProtectClass.V1LicenseAcqURL = licenseAcpUrl;myWMRMProtectClass.V1KeyID = keyID;myWMRMProtectClass.ProtectFile(drmFilePath);}catch (Exception e){msg = "錯誤信息:" + e.ToString();return false;}finally{try{//釋放對象 if (myWMRMHeaderClass != null){Marshal.ReleaseComObject(myWMRMHeaderClass);myWMRMHeaderClass = null;}if (myWMRMProtectClass != null){Marshal.ReleaseComObject(myWMRMProtectClass);myWMRMProtectClass = null;}}catch (Exception ex){}}msg = "打包后文件:" + drmFilePath;return true;}/// <summary>/// 創建用于DRM加密的Key/// </summary>/// <param name="keyID">用于打包的Key</param>/// <param name="seed"></param>/// <returns></returns> private static string KeyGenerate(string keyID, string seed){//創建WMRMKeysClass對象 WMRMKeysClass myWMRMKeysClass = new WMRMKeysClass();myWMRMKeysClass.KeyID = keyID.Trim();myWMRMKeysClass.Seed = seed.Trim();return myWMRMKeysClass.GenerateKey();}} }

?

運行該程序,選擇要進行打包的文件,點開始打包,過一會就打包完成了,現在去播放打包后的視頻文件,嘿嘿,是不是開始獲取License了啊,不過現在是獲取不成功的,下一篇文章將會介紹License獲取。

?

謝謝,希望我的文章對大家有幫助!

?

文章源代碼:

下載

轉載于:https://www.cnblogs.com/zgqys1980/archive/2011/11/08/2241537.html

總結

以上是生活随笔為你收集整理的DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。