DRM-内容数据版权加密保护技术学习(中):License预发放实现 (转)
2011-11-08 18:14
507 查看
在上一篇文章里实现了对媒体文体的DRM加密,现在一起来实现License的预发放。
所谓预发放就是在播放媒体文件之前先获取到License,License获取成功后,可直接在电脑上进行媒体文件的播放。
实现步骤如下:
1. 新建WebApplication工程,添加对WMRMObjs.dll的引用,在本文章中工程命名为DRMLicenseGet。
2. License预发放程序代码编写:
Web.config:配置文件
配置文件内配置的私钥、公钥、种子和上一篇文章内的信息相同。
GenerateLicense.cs:
IssueLicense.aspx:该文件只需在服务器端编写代码
GetLicense.aspx:该页面为用户操作页面,不需要在服务器端编写代码
3.效果:
![](http://images.cnblogs.com/cnblogs_com/fanmenglife/WindowsLiveWriter/DRMDRM_A816/image_thumb.png)
输入媒体文件加密时使用的Key,点击获取License,获取成功就可以播放媒体文件啦。
下一篇文章将介绍License后发放的实现。
谢谢,希望我的文章对大家有帮助!
文章源代码:
下载
所谓预发放就是在播放媒体文件之前先获取到License,License获取成功后,可直接在电脑上进行媒体文件的播放。
实现步骤如下:
1. 新建WebApplication工程,添加对WMRMObjs.dll的引用,在本文章中工程命名为DRMLicenseGet。
2. License预发放程序代码编写:
Web.config:配置文件
<appSettings> <!-- 私钥 --> <add key="PrivateKey" value="!qYNXRckn69VzoSNmGJ9umMfgSw="/> <!-- 公钥 --> <add key="PublicKey" value="R76wg3M2nq3yDRWWI2hFESO*zRXNo2qcNdeVocH7cjwBSN!WnOi8Gg=="/> <!-- 种子 --> <add key="Seed" value="eQ50hSVGytB3IEr0Tr6UAUMEVlJfcD9XObjE8UhP"/> </appSettings>
配置文件内配置的私钥、公钥、种子和上一篇文章内的信息相同。
GenerateLicense.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using WMRMOBJSLib; using System.Configuration; namespace DRMLicenseGet { public class GenerateLicense { /// <summary> /// 生成License /// </summary> /// <param name="keyID">加密时使用的keyID</param> /// <param name="Challenge">页面传过来的Challenge值</param> /// <returns></returns> public static string Generate(string keyID, string Challenge) { //从配置文件内获得私钥、公钥、种子和后发放License获取URL地址 string privateKey = ConfigurationManager.AppSettings["PrivateKey"]; string publicKey = ConfigurationManager.AppSettings["PublicKey"]; string seed = ConfigurationManager.AppSettings["Seed"]; //处理许可请求对象 WMRMChallenge myWMRMChallenge = new WMRMChallenge(); //管理内容头对象 WMRMHeader myWMRMHeader = new WMRMHeader(); //管理加密密钥和许可密钥种子对象 WMRMKeys myWMRMKeys = new WMRMKeys(); //指定加密内容的使用权限对象 WMRMRights myWMRMRights = new WMRMRights(); //创建许可对象 WMRMLicGen myWMRMLicGen = new WMRMLicGen(); //将许可递交给客户端对象 WMRMResponse myWMRMResponse = new WMRMResponse(); try { string strLicenseRequested = Challenge; myWMRMChallenge.Challenge = strLicenseRequested; myWMRMKeys.KeyID = keyID; myWMRMKeys.Seed = seed; #region 设置播放权限 //最小的安全级别 myWMRMRights.MinimumAppSecurity = 500; //是否允许播放,false-不允许,true-允许 myWMRMRights.AllowPlay = true; //是否允许在PC机上播放,0-不允许,1-允许 myWMRMRights.AllowPlayOnPC = 1; //允许播放次数 myWMRMRights.Playcount = 2; //是否允许拷贝,false-不允许,true-允许 myWMRMRights.AllowCopy = false; //允许拷贝次数 myWMRMRights.CopyCount = 1; //是否允许联合播放,false-不允许,true-允许 myWMRMRights.AllowCollaborativePlay = false; //是否允许刻录,false-不允许,true-允许 myWMRMRights.AllowPlaylistBurn = false; //最大刻录次数 myWMRMRights.MaxPlaylistBurnCount = 1; //能刻录到光盘上的最大次数 myWMRMRights.PlaylistBurnTrackCount = 1; //是否允许备份许可证,0-不允许,1-允许 myWMRMRights.AllowBackupRestore = 0; //是否允许烧录到CD上,0-不允许,1-允许 myWMRMRights.AllowBurnToCD = 0; //是否允许把已打包的流保存到磁盘上,0-不允许,1-允许 myWMRMRights.AllowSaveStreamProtected = 0; ////当客户端机器时间更改到更早时间时,该证书是否失效,0-不失效,1-失败 //myWMRMRights.DisableOnClockRollback = 1; ////当客户端机器时间更改到更早时间时,该证书是否自动删除,0-不删除,1-删除 //myWMRMRights.DeleteOnClockRollback = 1; myWMRMRights.PMRights = 51; myWMRMRights.PMAppSecurity = 150; #endregion myWMRMLicGen.KeyID = myWMRMKeys.KeyID; myWMRMLicGen.SetKey("", myWMRMKeys.GenerateKey()); myWMRMLicGen.Rights = myWMRMRights.GetAllRights(); myWMRMLicGen.ClientInfo = myWMRMChallenge.ClientInfo; myWMRMLicGen.Priority = 10; #region 添加版权信息 //版权 myWMRMLicGen.set_Attribute("Copyright", "Microsoft"); //类型 myWMRMLicGen.set_Attribute("ContentType", "Video"); //作者 myWMRMLicGen.set_Attribute("Author", "Terence"); //网站 myWMRMLicGen.set_Attribute("ArtistURL", "http://www.cnblogs.com/fanmenglife"); //标题 myWMRMLicGen.set_Attribute("Title", "Terence's Video"); //License提供商 myWMRMLicGen.set_Attribute("LicenseDistributor", "Terence"); //License提供商网站 myWMRMLicGen.set_Attribute("LicenseDistributorURL", "http://www.cnblogs.com/fanmenglife"); //内容提供商 myWMRMLicGen.set_Attribute("ContentDistributor", "Terence"); //等级 myWMRMLicGen.set_Attribute("Rating", "高级"); //描述 myWMRMLicGen.set_Attribute("Description", "Terence's Video"); #endregion myWMRMLicGen.BindToPubKey = publicKey; //生成License string license = myWMRMLicGen.GetLicenseToDeliver(); myWMRMResponse.AddLicense("2.0.0.0", license); return myWMRMResponse.GetLicenseResponse(); } catch (Exception e) { return ""; } } } }
IssueLicense.aspx:该文件只需在服务器端编写代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DRMLicenseGet { public partial class IssueLicense : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //获取challenge值 string challenge = Page.Request.Params["challenge"]; //获取KeyID值 string keyID = Page.Request.Params["keyid"]; //获得License string license = GenerateLicense.Generate(keyID, challenge); //输出License Page.Response.Write(license); } } } }
GetLicense.aspx:该页面为用户操作页面,不需要在服务器端编写代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetLicense.aspx.cs" Inherits="DRMLicenseGet.GetLicense" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script language="javascript" type="text/javascript"> function GetLicense() { try { var url = "http://localhost:20103/IssueLicense.aspx?keyid=" + document.getElementById("txtKeyID").value; licenseObj.GetLicenseFromURL("<a></a>", url); alert('许可证下载成功!'); } catch (e) { alert("许可证下载失败,错误信息:" + e.message); return; } } </script> </head> <body> <object name="licenseObj" classid="clsid:A9FC132B-096D-460B-B7D5-1DB0FAE0C062" id="licenseObj" width="0"> </object> <form id="form1" runat="server"> <div> <input id="txtKeyID" type="text" value="请输入加密时使用的KeyID" onclick="this.value = '';" /> <input id="btnGetLicense" type="button" value="获取License" onclick="GetLicense()" /></div> </form> </body> </html>
3.效果:
![](http://images.cnblogs.com/cnblogs_com/fanmenglife/WindowsLiveWriter/DRMDRM_A816/image_thumb.png)
输入媒体文件加密时使用的Key,点击获取License,获取成功就可以播放媒体文件啦。
下一篇文章将介绍License后发放的实现。
谢谢,希望我的文章对大家有帮助!
文章源代码:
下载
相关文章推荐
- [破解] DRM-内容数据版权加密保护技术学习(中):License预发放实现
- DRM-内容数据版权加密保护技术学习(中):License预发放实现
- DRM-内容数据版权加密保护技术学习(上):视频文件打包实现
- [破解] DRM-内容数据版权加密保护技术学习(上):视频文件打包实现
- DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转)
- 【SQL Server学习笔记】通过加密来保护数据库中的数据
- 【SQL Server学习笔记】通过加密来保护数据库中的数据
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- 敏感数据加密保护和数据库访问方式的测试内容
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- 视频内容谁来保护?阿里云视频加密技术大揭秘,打造云上视频安全体系
- jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
- Flash Video DRM 视频版权保护技术
- 网络环境中数据加密技术实现与分析
- 视频内容谁来保护?阿里云视频加密技术大揭秘,打造云上视频安全体系
- 全文检索技术Lucene入门和学习、与数据库数据结合的demo实现
- 数据存储加密技术的实现