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-内容数据版权加密保护技术学习(上):视频文件打包实现(转)相关推荐

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

    1. DRM介绍: DRM,英文全称Digital Rights Management, 可以翻译为:内容数字版权加密保护技术. DRM技术的工作原理是,首先建立数字节目授权中心.编码压缩后的数字节目 ...

  2. [破解] DRM-内容数据版权加密保护技术学习(中):License预发放实现

    在上一篇文章里实现了对媒体文体的DRM加密,现在一起来实现License的预发放. 所谓预发放就是在播放媒体文件之前先获取到License,License获取成功后,可直接在电脑上进行媒体文件的播放. ...

  3. 软件加密保护技术简介

    加密技术 软件加密保护技术简介 在这里并不是要系统的讨论软件加密保护技术,只是简单介绍一些和破解相关的软件保护方式,目的是让大家搞清楚哪些是解密的对象.有一点是要首先明确的,并不是所有的受限制软件都可 ...

  4. system.img解包打包工具_好程序员云计算学习路线分享文件打包及压缩

    好程序员云计算学习路线分享文件打包及压缩 好程序员 建议针对目录 Demo: 复制未打包的文件到远程主机 [root@yangs ~]# du -sh /etc 39M /etc [root@yang ...

  5. linux如何锁定文件夹,如何在没有加密的情况下保护Linux / Unix上的文件夹? | MOS86...

    如果您不需要或想要加密计算机上的文件,但希望停止随意窥探,那么在Linux / Unix上密码保护文件夹的最佳方法是什么?今天 今天的问题 照片由Nathan Meijer(Flickr)提供. 问题 ...

  6. Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一.基于tkinter实现的UI设计 1.1 库的选择及思路 1.2 定位方法的选用 1.3 Frame控件 1.4 变量设置 1.5 批量设置 1.6 Text文 ...

  7. Java 将数据写入磁盘并读取磁盘上的文件

    package test; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; i ...

  8. python selenium 文件上传_Python+Selenium学习--上传文件

    场景 文件上传操作也比较常见功能之一,上传功能操作webdriver 并没有提供对应的方法,关键上传文件的思路. 上传过程一般要打开一个系统的window 窗口,从窗口选择本地文件添加.所以,一般会卡 ...

  9. web内容如何保护:如何有效地保护 HTML5 格式的视频内容?

    文章资料还没有整理完,现在还不通顺,但是可以做笔记看 HTML是用于创建web页面和web应用程序的公开标准的标记语言.HTML文件基本上是纯文本文件,这意味着软件应用程序和普通人可以轻松地创建.读取 ...

最新文章

  1. DELL服务器重做RAID
  2. protobuf---messge嵌套get set
  3. 【渝粤教育】国家开放大学2018年春季 0434-22T高级英语口语 参考试题
  4. 魔百盒哪款型号配置高_松下负离子吹风机怎么样哪款好?推荐型号?2020年9月松下负离子电吹风选购攻略...
  5. spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict
  6. 了解如何使用Tkinter在Python中创建GUI
  7. android cmd里查看systemapp剩余空间不足,解决emui系统内部存储空间不足的办法
  8. Linux:yum配置和使用
  9. openapi and light-4j
  10. php解析dcm,DICOM入门(三)——解析DCM文件
  11. 主动降噪ANC 耳机的传参设计
  12. 50部必看的经典好莱坞电影
  13. Xmind 免费安装使用教程
  14. MTK功能机ATA导入
  15. 华为手机在计算机里怎么隐藏游戏,原来华为手机隐藏着这么多实用功能!玩一年恐怕也发现不了...
  16. linux环境下mysql主从数据库配置(maser-slave-replication)
  17. MATLAB Robotics System Toolbox学习笔记(一):一步一步建造一个机械臂
  18. JS实现抽奖代码(0-999随机数开始暂停抽奖按钮)
  19. 关于vue-lic脚手架使用less和sass的配置
  20. Msbuild的工具集版本

热门文章

  1. https://www.unimelb.edu.au/
  2. 雅思听力的词语练习打字!!!
  3. 史上最强翻译器,没有之一,不接受反驳
  4. U3D sorting layer, sort order, order in layer, layer深入辨析
  5. Java中ListE对象赋值问题(引用传递和值传递)
  6. 在场景中加入第一人称视角运行后一直往下掉的解决方案
  7. 深入浅出面向对象和原型【番外篇——重新认识new】
  8. 响应式编程RxJava (一)
  9. 半导体公司IC设计环境概况
  10. IBM 计划在公司内部推行基于比特币的开源项目Hyperledger