在上一篇文章里实现了对媒体文体的DRM加密,现在一起来实现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" οnclick="GetLicense()" /></div> </form> </body> </html>

3.效果:

输入媒体文件加密时使用的Key,点击获取License,获取成功就可以播放媒体文件啦。

下一篇文章将介绍License后发放的实现。

谢谢,希望我的文章对大家有帮助!

文章源代码:

下载

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

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

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

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

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

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

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

  4. 自动实现MS Word保护,Aspose教你如何加密保护Java程序中的DOCX文件

    MS Word允许你用各种机制来保护DOCX文档.你可以设置打开文档所需的密码.另一方面,您可以指定保护级别,如使文档只读,只允许注释或表格字段等. 在这篇文章中,将学习如何自动化MS Word保护功 ...

  5. vb.net中滚动条一直显示没有数据时也显示_前端学习中你必须了解的几张图

    1.页面加载事件流程 静态资源加载 2.原型和原型链 3. tcp三次握手和四次挥手 客:第一次握手:我要向你(服)发送请求哦 服:第二次握手:我已经准备好了,你呢? 客:第三次握手:我也准备好了,我 ...

  6. 如何使用HTTPS加密保护网站?

    加密 Web 内容并不是什么新鲜事:自发布通过SSL/TLS协议来加密 Web 内容的规范以来,已经过去了近 20 年.然而,近年来,运行安全的HTTPS加密 Web 服务器已经从一种选择变成了一种安 ...

  7. 深度学习中的隐私保护技术综述

    摘要:如今机器学习以及深度学习在各个领域广泛应用,包括医疗领域.金融领域.网络安全领域等等.深度学习的首要任务在于数据收集,然而在数据收集的过程中就可能产生隐私泄露的风险,而隐私泄露将导致用户不再信任 ...

  8. 如何设计云存储服务端数据存储加密机制

    云存储是一种新型的网络存储形式.随着云存储的广泛使用,云存储中的数据安全问题,如数据泄漏.数据篡改,如何设计云存储服务端数据存储加密机制也成了用户广泛关注的问题.云存储可以分为访问层.应用接口层.基础 ...

  9. word计算机桌面加密,Word文档怎么加密 保护Word文档就靠这4招

    出于对内容.版权等保护的目的,有的Word文档我们不希望别人能够打开,又有的希望只能阅读而不能修改,还有的希望只有部分文档能被访问或修改.面对不同的保密需求,我们该采取什么样的措施来保证自己的文档&q ...

最新文章

  1. 微信小程序import和include
  2. 调查显示:企业将部署SDN提上议程
  3. 图的根节点-数据结构作业。。
  4. 在线协作开发工具apizza使用方法(https://apizza.net/projects)
  5. ios34---GDC,dispatch_once
  6. jmh 基准测试_JMH:如何设置和运行JMH基准
  7. python 查找算法_python快速查找算法应用实例
  8. python图像压缩主成分分析实例_python机器学习API介绍13: 数据降维及主成分分析...
  9. Unity3D之Json序列化
  10. java常用算法手册 赵志云_Java常用算法手册
  11. [渝粤教育] 北京理工大学 工程热力学 参考 资料
  12. VMware安装虚拟机出现STOP: 0x0000005d错误
  13. 【图像处理】PS曲线工具matlab实现 交互自定义灰度映射(Gray Level Transformation)附代码链接
  14. 计算机组成与设计第五版课后答案ch04,数据结构第4章例题与答案
  15. 2016 杭州云栖大会随笔
  16. 【北京-亚运村】这7家公司推荐给你
  17. linux 系统安装aria2以及配置web端
  18. java中使用axis发布和调用webService
  19. HarmonyOS实战—Text组件宽高三种值的写法和颜色属性
  20. mixins(混入)

热门文章

  1. 工作占用了太多私人时间_一本正经聊驾驶 | 汽车真的为我们节约时间了吗
  2. java字节对齐原则_C struct 中字节对齐问题
  3. mac java tomcat_mac平台tomcat部署web项目
  4. 我的世界服务器名称被占用,为什么我的世界服务器说此用户名已被注册我都换了很多用户了都没用 爱问知识人...
  5. UART接口算法移植加密芯片的调试技巧——算法调试
  6. Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置
  7. 《浪潮之巅》吴军:特斯拉自动驾驶堪比中甲水平,全球5G看好华为
  8. 不服就干!抖音要用多闪挑战微信,但官网瞬间被封
  9. 亚马逊自动化仓库事故,机器人失手戳破有毒喷雾,24名工人被送医院
  10. 机器人“病患”会流血会休克,魔鬼训练从斯坦福医院开始 |准医生的噩梦