博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DRM-内容数据版权加密保护技术学习(中):License预发放实现 (转)
阅读量:4315 次
发布时间:2019-06-06

本文共 6062 字,大约阅读时间需要 20 分钟。

在上一篇文章里实现了对媒体文体的DRM加密,现在一起来实现License的预发放。

所谓预发放就是在播放媒体文件之前先获取到License,License获取成功后,可直接在电脑上进行媒体文件的播放。

实现步骤如下:

1. 新建WebApplication工程,添加对WMRMObjs.dll的引用,在本文章中工程命名为DRMLicenseGet。

2. License预发放程序代码编写:

Web.config:配置文件

配置文件内配置的私钥、公钥、种子和上一篇文章内的信息相同。

 

GenerateLicense.cs:

 

using System;using System.Collections.Generic;using System.Linq;using System.Web;using WMRMOBJSLib;using System.Configuration;namespace DRMLicenseGet{    public class GenerateLicense    {        ///         /// 生成License        ///         /// 加密时使用的keyID        /// 页面传过来的Challenge值        /// 
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" %>                    

 

 

3.效果:

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

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

 

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

文章源代码:

转载于:https://www.cnblogs.com/zgqys1980/archive/2011/11/08/2241543.html

你可能感兴趣的文章
OpenGL渲染流程
查看>>
委托异步回调
查看>>
扩展欧几里得算法
查看>>
いつでもどこでも本格的に麻雀&チュートリアルが充実!iPhone/iPod touch/iPad向け「雀龍門Mobile」をiPadで遊んでみました...
查看>>
如何重置mysql中的root密码
查看>>
bzoj 3171: [Tjoi2013]循环格 最小费用最大流
查看>>
关于IO的一些数字
查看>>
高放的c++学习笔记之模板与泛型编程
查看>>
bzoj 1089: [SCOI2003]严格n元树
查看>>
mybatis 日期比较
查看>>
更新jdk
查看>>
string与StringBuilder之性能比较
查看>>
python3----练习题(购物车)
查看>>
IOS不错的学习资源特别是图片效果的处理上
查看>>
HDU 2072(字符串的流式操作,学习了)
查看>>
win10 vs2015源码编译opencv、opencv_contrib、Tesseract
查看>>
css取消a标签在移动端点击时的背景颜色
查看>>
Annotation(注解)
查看>>
MySQL(四)--练习题
查看>>
高效掌握C#第五回---猜单词游戏
查看>>