如何使用Moodle搭建课程管理系统并应用DRM-X课程加密系统与之无缝集成?_麒麟系统moodle搭建-程序员宅基地

技术标签: 加密媒体扩展HTML5 DRM  HTML5 DRM视频播放器  drm解决方案  如何在moodle中嵌入Xvast播放器  

如何使用Moodle搭建课程管理系统并应用DRM-X课程加密系统与之无缝集成?


如何使用Moodle搭建课程管理系统并应用DRM-X课程加密系统与之无缝集成?
Moodle是一个用于制作网络课程或网站的软件包,您可以通过它搭建您自己的课程网站。DRM-X 4.0 与Moodle集成是当用户打开受保护的文件获取许可证时,将会判断其是否登录Moodle,是否拥有课程的学习权限,这样您就可以验证客户是否可以获取许可证,并调用DRM-X许可证发送给客户。最后我们还会介绍将受保护的文件嵌入Moodle,用户登录您的网站后即可观看课程,无需多余的验证。

一、 安装Moodle,配置您的网站。
从官网上下载最新moodle安装包,解压上传至您的服务器中,按照它的提示修改必要的配置文件并完成安装(包括Moodle数据库的建立,因此您必须拥有自己的服务器和数据库,下面示范使用了本地搭建的Apache和Mysql数据库)。Moodle的安装教程网上很多,这里不多做示范。

完成安装后,注册管理员账号,账号注册完成后登陆管理员账号创建您的课程。
在这里插入图片描述
在这里插入图片描述
“示例课程”添加成功后为您的学生创建账户
在这里插入图片描述
在这里插入图片描述
学生账户创建成功后给您的学生添加学习“示例课程”的权限。在“示例课程”的“成员”中点击“加入用户”,选择您的学生加入。
在这里插入图片描述
在这里插入图片描述
这样我们完成了一个最简单基础的课程创建并加入学生用户。接着,我们要在空白的课程中加入加密内容,通过最新DRM-X 4.0加密平台加密音视频或pdf文件,将之与您moodle网站集成并嵌入网页,使您的学生用户轻松安全地登录学习课程。

二 注册一个DRM-X 4.0账号,加密您的课程文件。
从Xvast官网下载Windows 版的Xvast浏览器https://www.xvast.cn, 安装后打开软件。

通过Xvast浏览器访问 https://4.drm-x.cn/register.aspx注册一个DRM-X 4.0加密系统的账号。
在这里插入图片描述
登录到DRM-X 4.0加密后台,我们首先点击 "许可证权限 ",添加一个许可证权限。 在这里设置权限价格,是否允许打开次数设置有效期,保护文档,选择是否允许打印,是否启用水印功能,您可以任意设置水印内容以防止盗版,动态水印支持两种方式的显示,第一种方式可以设置水印的位置和变化频率,第二种水印的显示方式为跑马灯效果,安全等级更高。
在这里插入图片描述
在这里插入图片描述
DRM-X 4.0继承了3.0的黑名单防录屏功能,通过黑名单程序的设置,可以有效的防止黑名单中的程序录屏或截图。当用户打开受保护的文件时,如果程序检测到有黑名单中的程序在运行,程序将会立即拦阻黑名单程序的运行。目前黑名单程序中涵盖了市面上上百种录屏截图程序,您可以任意选择禁止可能盗取您知识产权的软件。
在这里插入图片描述
海海软件提供了独特的智能防录屏技术,它可以有效的自动检测市面上的录屏软件,甚至是未来的录屏软件。它能帮助内容提供商更好地控制其DRM-X 4.0受保护的内容版权。
在这里插入图片描述
这样我们就获得了一个自定义的许可证权限。
在这里插入图片描述
接下来我们再创建一个使用以上权限的许可证模板,有了它就可以加密文件了。
在这里插入图片描述
这里特别要强调的是,“您系统中的产品ID”这一项必须与您数据库中的将要使用该模板加密的课程号相对应,一般moodle的学生选课结果储存在“mdl_role_assignments”表中,这里我们“示例课程”的课程ID是56,这个数字必须与上文提到的“您系统中的产品ID”相同,且可以看到ID为6的用户也就是之前创建的“学生”已经可以学习该课程。
在这里插入图片描述
当然,如果您感觉在冗长的数据库中寻找参数过于繁琐,您也可以直接在moodle后台后台找到该参数。在课程的‘成员’栏中点击设置,将鼠标移到权限上,再查看屏幕左下角的跳转网址,最后一个数字就是我们在寻找的该课程产品ID了。
在这里插入图片描述
用该模板加密文件,我们拿一个视频文件做示范。

进入加密文件页面选择刚刚创建的许可证模板和权限。
在这里插入图片描述
在这里插入图片描述
点击 “浏览”选择文件,开始加密,加密后的文件结尾会带有_P。
在这里插入图片描述
这样,就完成了对一个视频文件的加密,包括其他各种格式的音视频和pdf文档、网页内容都可以如上加密。

加密的详细过程可以参照以下教程:

视频加密:https://www.drm-x.com/DRM-X4.0_encryption_tutorial.aspx

网页加密:https://www.drm-x.com/DRM_web_page_html_encryption_tutorial.aspx

PDF加密:https://www.drm-x.com/How_To_Encrypt_PDF.aspx

三 moodle与DRM-X 4.0集成,修改集成代码。
现在,我们需要将DRM-X 4.0与moodle网站集成。集成后,选择了您相应课程的学生只用登录您的moodle网站即可查看课程中的加密内容,无需做多余的登录验证操作,下面就来示范一下集成的具体操作。

按照样例代码,您需要编写四个页面,分别是index.php, reindex.php, login.php和licstore.php。当用户打开加密文件后,会自动跳转到index.php,检查他有没有登录他的moodle账户,如果没有,跳转到reindex.php登录账号,反之,则直接跳转到login.php验证用户的密码是否正确,是否选择了相应课程等等,您可以在该页面自由地添加修改您的验证代码,之后,如果用户通过了验证,则跳转至licstore.php获取许可证,打开加密文件。

在index.php中,获取加密文件的相应信息,包括profileid, clientinfo, rightsid, yourproductid, platform, contenttype, version, return_url,将这些参数储存在全局变量$USER中,方便以后调用,然后判断学生用户有没有登录其moodle账户。

require_once("../config.php");
$USER->ProfileID = $_REQUEST["profileid"];
$USER->ClientInfo = $_REQUEST["clientinfo"];
$USER->Platform = $_REQUEST["platform"];
$USER->ContentType = $_REQUEST["contenttype"];
$USER->ProductID = $_REQUEST["yourproductid"];
$USER->RightsID = $_REQUEST["rightsid"];
$USER->Version = $_REQUEST["version"];
$USER->Return_URL = $_REQUEST["return_url"];

if (isloggedin() or isguestuser()){
    echo "<SCRIPT language=JavaScript>location='login.php';</SCRIPT>";
}else{
    echo "<SCRIPT language=JavaScript>location='reindex.php';</SCRIPT>";
}

如果学生没有登录moodle,则跳转到登录页面reindex.php(该登录页面不是moodle的初始登录页面,可以让用户在不登录moodle的情况下获取许可证查看加密文件),否则跳转到login.php进行具体验证。

如果用户是没有登录moodle从reindex转来的,则需要验证密码。如果用户已经登录了moodle,则无需验证密码。

if($_GET['un'] == 'login'){
	$username = $_REQUEST["username"];
	$pwd = $_REQUEST["password"];
	
	/****** verify the password *******/
	$result = mysqli_query($dbcon,"SELECT ID,password,email FROM mdl_user WHERE username ='" .$username. "'");
	$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
	$email = $row['email'];
	$t_hasher = new \PasswordHash(8, FALSE);
	$newpwd= $t_hasher->CheckPassword($pwd, $row['password']);
	if ($newpwd != true ) {
		$info = "Your Account or Password is incorrect! <br><br>Please revisit the course!
";
	} else{
		$ username 	= $username;
    		$_SESSION['pwd'] 		= $pwd;
		$ userid 				= $row['ID'];
		$ userEmail 				= $email;
	}
/***/
// If the user has already logged into moodle, there is no need to verify the password.
}else{
	$username = $USER->username;
	$userEmail = $USER->email;
	$userid = $USER->id;
	
}

然后就是验证用户有没有学习相应课程的权限,如果验证成功,将用户信息存入DRM-X后台,然后获取许可证跳转至下个页面打开加密文件。注意,下面红色字体部分需要改成您的DRM-X账号、您设置的许可证服务的验证码(这个下面会做示范)以及您设置的GroupID。

// Query the order based on the user ID
$id_query = mysqli_query($dbcon,"SELECT id FROM mdl_user WHERE username='" .$username. "'");
$id_row = mysqli_fetch_array($id_query, MYSQLI_ASSOC);
$id_result = $id_row['id'];

$courseid_query = mysqli_query($dbcon,"SELECT contextid FROM mdl_role_assignments WHERE userid='" .$id_result. "'");
while($courseid_row = mysqli_fetch_array($courseid_query, MYSQLI_ASSOC)){
	$courseid_result = $courseid_row['contextid'];
	if ($courseid_result == $USER->ProductID){
		/******* Check whether the user exists on the DRM-X platform********/
		$wsdl="http://4.drm-x.cn/haihaisoftlicenseservice.asmx?wsdl";
		$CheckUser_param = array(
			'UserName' 		=> $username,
			'AdminEmail' 		=> '[email protected]', //your DRM-X 4.0 account
			'WebServiceAuthStr' 	=> 'aaaaaa', // the Web Service Authentication String you set in DRM-X 4.0 background
		);

		$client = new nusoap_client($wsdl, 'wsdl');
		$client->soap_defencoding = 'UTF-8';
		$client->decode_utf8 = false;
		$CheckUser = $client->call('CheckUserExists', array('parameters' => $CheckUser_param), '', '', true, true);

		$CheckUser_result = $CheckUser['CheckUserExistsResult'];
		/*** End detecting whether the user exists **/

// If the username is not exists, call 'AddNewUser' to add user.
		if($CheckUser_result == "False"){
			$add_user_param = array(
				'AdminEmail' 		=> '[email protected]',// your DRM-X 4.0 account
				'WebServiceAuthStr' => 'aaaaaa',// the Web Service Authentication String you set in DRM-X 4.0 background
				'GroupID' 		=> '11726',//GroupID
				'UserLoginName' 	=> $username,// Username or ID
				'UserPassword' 		=> 'N/A', 
				'UserEmail' 		=> $userEmail,
				'UserFullName' 		=> 'N/A', 
				'Title' 		=> 'N/A',
				'Company' 		=> 'N/A',
				'Address' 		=> 'N/A',
				'City' 			=> 'N/A',
				'Province' 		=> 'N/A',
				'ZipCode' 		=> 'N/A',
				'Phone' 		=> 'N/A',
				'CompanyURL' 		=> 'N/A',
				'SecurityQuestion' 	=> 'N/A',
				'SecurityAnswer' 	=> 'N/A',
				'IP' 			=> getIP(),//
				'Money' 		=> '0',// 
				'BindNumber' 		=> '2',// 
				'IsApproved' 		=> 'yes',// 
				'IsLockedOut' 		=> 'no',// 
			);

			$add_user = $client->call('AddNewUser', array('parameters' => $add_user_param), '', '', true, true);
			$result = $add_user['AddNewUserResult'];
		}
		/*** Successfully added new users ***/
						/***** obtain a license after the license authority is updated ****/
		$param = array(
		  'AdminEmail' 		=> '[email protected]',// your DRM-X 4.0 account
		  'WebServiceAuthStr'  => 'aaaaaa',// the Web Service Authentication String you set in DRM-X 4.0 background
		  'ProfileID'          => $USER->ProfileID,
		  'ClientInfo'         => $USER->ClientInfo,        
		  'RightsID'           => $USER->RightsID,
		  'UserLoginName'      => $username, 
		  'UserFullName'       => 'N/A', 
		  'GroupID'            => 11726,//GroupID
		  'Message'            => 'N/A',
		  'IP'                 => getIP(),
		  'Platform'           => $USER->Platform, 
		  'ContentType'        => $USER->ContentType,
		  'Version'            => $USER->Version, 
		);

		$client = new nusoap_client($wsdl, 'wsdl');
		$client->soap_defencoding = 'UTF-8';
		$client->decode_utf8 = false;
		/***** Obtain a license by calling the getLicenseRemoteToTableWithVersion method ******/
		$result = $client->call('getLicenseRemoteToTableWithVersion', array('parameters' => $param), '', '', true, true);
		$license = $result['getLicenseRemoteToTableWithVersionResult'];
		$message = $result['Message'];

		if(stripos($license, '<div id="License_table_DRM-x4" style="display:none;">' )  === false )
		  echo "<SCRIPT language=JavaScript>location='LicError.php?error=".$license."&message=".$message."';</SCRIPT>";
		/***** After obtaining the license, store the license and message into $USER, then jump to the licstore page. ******/
		$USER->license = $license;
		$USER->message = $message;
		 echo "<SCRIPT language=JavaScript>location='licstore.php';</SCRIPT>";
		$flag = 1;
		$info = "Getting license...";
		exit;
	}
}

这里只是最简单的样例验证,如果您在moodle中安装了更多的功能插件,例如学生自主购买课程,支付课程费用等等,您还需在代码中加入是否购买,支付是否完成的验证。

再进入DRM-X平台的账户设置选项,选择网站集成参数设置,选择自定义登录页面集成,依次填入许可证服务的验证码和您集成页面的url,这样用户打开加密文件后就会跳转到您的moodle集成页面进行验证了。
在这里插入图片描述
在这里插入图片描述
这样就基本完成了将DRM-X与您的moodle网站的集成,之后您只需将加密文件发给您的学生用户,通过Xvast浏览器打开即可查看加密内容,而没有您课程学习权限的人就算拿到了加密文件也无法查看。

当然,您也可以直接将加密文件嵌入您的moodle页面,这样您的学生可以直接在您的网站内浏览学习您的课程。

在刚刚创建的示例课程的主题1中添加一个活动或资源,选择网页。
在这里插入图片描述
如图示在html栏目里加入嵌入代码,嵌入代码已保存在样例代码文件夹中,您只需将视频或音频地址修改成您加密文件的url即可。
在这里插入图片描述

<div id="LoadingText" style="display: none;" align="center">
	Please wait, connecting to obtain license page...
</div>
<div align="center" style="margin-top: 10px">

    <div id="playerButton" style="display: none;">
        <button onclick="supportType(event,'video/ogg','theora, vorbis')" class="playerButton" type="button">Get License...
    </button></div>

  <script type="text/javascript">
        if(navigator.userAgent.indexOf("Xvast") == -1){
            document.write('Please open the protected files in Xvast browser. Download Xvast');
        }else{
document.write('<video id="xvast_player" controls="controls" 
src="http://192.168.0.103/01James Hudson Taylor_P.mp4" class="video-js" 
data-setup=\'{ "autoplay":false, "playbackRates": [0.5, 0.7, 1, 1.5, 2, 3, 4], "width": 856, "height": 480 }\'>');
        }
</script>

四 播放您的课程。
集成完成后播放您的课程,首先在Xvast浏览器中打开您的网站登录学生账号。然后打开”示例课程”,浏览器会自动获取许可证,点击播放。
在这里插入图片描述
完成后效果如上图,视频播放时会有两个水印移动显示,您可以自定义水印的内容以防止被录屏,另外,DRM-X 4.0还拥有黑名单程序阻止录屏软件,以及智能防翻录功能杜绝恶意的录屏截屏。学生如果参加了示例课程的学习,就可以直接播放该课程下的加密视频。

同样,您可以直接将您加密的PDF文件链接加入您的网站课程中,您的用户同样可以直接获取许可证阅读该内容,并且其中的水印功能可以避免您的资料被恶意截屏传输,因为水印中的内容会暴露传输源头的用户的个人信息。
在这里插入图片描述
至此,我们介绍了如何搭建基于Moodle的教学网站,如何使用DRM-X4.0加密文件,如何将DRM-X 4.0与Moodle集成,使得用户可以便捷地观看您的加密文件的同时也让您摆脱因盗版问题无法对您的课程教学进行有效传递和销售的困扰。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/haibo_shi/article/details/87282537

智能推荐

UML常见工具之NetBeans(downmoon)_netbeans uml-程序员宅基地

文章浏览阅读5.7k次。在上一篇UML建模的要点总结(一)简介了UML的一些基本知识,本文开始介绍UML的几个常见工具,一:netBeans UML插件,免费,简洁,强大。 二:IBM的RSA(也就是Rose的升级版,基于Eclipse),目前版本是7.5,收费(需要自己想办法注册),强大。 三:PowerDesigner 15,需要自己想办法注册,强大,通用于各种平台。 四:eclipse-m_netbeans uml

openjdk 使用_如何在OpenJDK中使用ECC-程序员宅基地

文章浏览阅读612次。openjdk 使用 曾经试图在Java和OpenJDK中使用椭圆曲线密码术 (ECC)的每个人要么被迫使用Bouncy Castle,要么被SunEC提供者弄糊涂了 。 SunEC提供程序根据文档 (报价)提供以下算法: AlgorithmParameters 欧共体 KeyAgreement ECDH KeyFactory 欧共体 KeyPair..._open jdk 禁用ec算法怎么办

Markdown语法笔记_规范markdown笔记-程序员宅基地

文章浏览阅读138次。1、标题使用 = 和 - 标记一级和二级标题我展示的是一级标题我展示的是二级标题显示效果如图:使用 # 号标记使用 # 号可表示 1-6 级标题,一级标题对应一个 # 号,二级标题对应两个 # 号,以此类推。hellohello显示效果如图:..._规范markdown笔记

Spark源码之persist方法,cache方法以及StorageLevel-程序员宅基地

文章浏览阅读5.3k次。今天看Spark源码的时候看到了persist方法与cache方法,这里就说明一下两者的区别,也解决了自己之前的疑惑。cache方法Spark2.11关于cache方法的源码是这样的: /** * Persist this RDD with the default storage level (`MEMORY_ONLY`). * 缓存RDD,缓存级别为仅在内存中 * 这里的cach_storagelevel

多媒体技术每日学习_setvibrationpattern-程序员宅基地

文章浏览阅读383次。运用手机多媒体使用通知使用通知什么是通知,通知就是下拉手机看到的那些提示信息。通知的简单用法在Android 8.0(API26) 后对通知更改了一些内容,以前是通过Notification.Builder(Context context).set…来设置通知的震动、灯光、音效的设置,新内容加了NotificationChannel(通知渠道),通过NotificationChannel来..._setvibrationpattern

Joomla! (DAY 6) - Joomsport (DAY 4): Tackling with View's Parameters - JElement_joom产品标签首字母大写还是小写-程序员宅基地

文章浏览阅读958次。JElement: The interface for Parameter of a ViewThere is one more piece of the puzzle! That is about "ltable" view. Its template's meta_joom产品标签首字母大写还是小写

随便推点

table表格align 弃用的HTML标签弃用,无法合并居中_table 设置<table style="text-align">失效文字无法居中-程序员宅基地

文章浏览阅读1.2k次。table生成单元格合并了 但是没有居中很丑,写了align 属性 ,显示弃用的HTML标签,页面还是不对。解决方法:合并的单元格写样式。style=“text-align:center;vertical-align:middle;”水平居中与垂直居中。页面:记录前端页面的坑。..._table 设置失效文字无法居中

电商项目测试实战(九)ATM机业务场景测试设计_思维导图atm机-程序员宅基地

文章浏览阅读800次。前台业务场景测试设计1、业务场景的思维导图2、确定每个功能的可达性ATM机功能以及可达性矩阵,如下:ATM功能: 登录 查询 取款 存款 转款 修改密码 退出 注意:列为主,行为辅。如:登录之后,可达的功能为:查询、取款、存款、转款、修改密码、退出  ..._思维导图atm机

rem、em、px的区别-程序员宅基地

文章浏览阅读160次。px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。特点:1. IE无法调整那些使用px作为单位的字体大小;2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位;3. Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。pt是一个物理长度单位,指的是72分之一英寸。9p..._emmmdsutcjaxmpm

CentOS7最小安装后应做的配置&必要软件安装流程_centos7 mini安装后配置服务器-程序员宅基地

文章浏览阅读7.8k次,点赞3次,收藏34次。CentOS7最小安装后应做的配置_centos7 mini安装后配置服务器

oracle jdk_两个Oracle JDK的故事-程序员宅基地

文章浏览阅读337次。oracle jdk 最近 ,人们担心 Java开发人员现在会无意中使用错误的Oracle提供的JDK实现(从JDK 11开始 ), Oracle提供了开源OpenJDK的构建 ,并且还主要基于OpenJDK源提供了商业JDK的构建。 下表比较并对比了Oracle提供的两种JDK版本(但是Oracle不会是唯一免费提供和/或收取支持费用的JDK构建的供应商)。 请记住,这代表了我对Orac..._连接oracle用什么jdk

apache camel_Apache Camel简介-程序员宅基地

文章浏览阅读241次。apache camel Apache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎,可帮助开发人员以各种特定于域的语言(DSL)(例如Java,Spring / XML,scala等)创建路由和中介规则。 骆驼用途广泛 Camel使用URI来支持大量的传输和消息传递模型,例如HTTP,JMS,JBI,Mina,SCA,CXF,它还与外部组件和数据格式很好地兼..._camelcontext 与 springcontext