运用 DRM 对流媒体文件加密
以前用 C++ 做过的 DRM 项目,现抽取出其中核心的代码, 演示一下如何借助 DRM 对流媒体文件进行保护。
虽然微软的 DRM 技术被破解了, 但那是以用户通过认证并下载证书为前提的。由是观之, 运用 DRM 对流媒体
文件施以保护仍有一定意义,这毕竟比什么都不做要强嘛!
/* drm.h*/
#ifndef __DRM_H__
#define __DRM_H__
#include <string>
#import "wmrmobjs.dll"
class DRMObject {
public:
DRMObject(char* inFile, char* outFile, char* licenseURL, char* corpName);
bool Encrypt();
public:
std::string key;
std::string seed;
std::string keyID;
std::string contentID;
std::string publicKey;
std::string privateKey;
private:
std::string _inFile;
std::string _outFile;
std::string _corpName;
std::string _licenseURL;
};
#endif
// drm.cxx
#include "drm.h"
#include <comdef.h>
#include <iostream>
DRMObject::DRMObject(char* inFile, char* outFile, char* licenseURL, char* corpName)
{
_inFile = inFile;
_outFile = outFile;
_corpName = corpName;
_licenseURL = licenseURL;
}
bool DRMObject::Encrypt()
{
try {
HRESULT hr;
// Initialize the COM library on the current thread
hr = CoInitialize(NULL);
if (FAILED(hr))
_com_issue_error(hr);
WMRMOBJSLib::IWMRMKeysPtr keysObj("Wmrmobjs.WMRMKeys");
WMRMOBJSLib::IWMRMHeaderPtr headerObj("Wmrmobjs.WMRMHeader");
WMRMOBJSLib::IWMRMProtectPtr protectObj("Wmrmobjs.WMRMProtect");
// Generate keyID,seed,contentID
keyID = keysObj->GenerateKeyID();
seed = keysObj->GenerateSeed();
contentID = keysObj->GenerateKeyID();
// Generate key
keysObj->KeyID = keyID.c_str();
keysObj->Seed = seed.c_str();
key = keysObj->GenerateKey();
// Set protected header
headerObj->KeyID = keyID.c_str();
headerObj->ContentID = contentID.c_str();
headerObj->LicenseAcqURL = _licenseURL.c_str();
headerObj->Attribute["Copyright"] = _corpName.c_str();
// verify the key
headerObj->SetCheckSum(key.c_str());
//Generate public and private key
_variant_t privKey, pubKey;
VariantInit(&privKey);
VariantInit(&pubKey);
keysObj->GenerateSigningKeys(&privKey, &pubKey);
headerObj->IndividualizedVersion = "2.2";
// Save private and public kyes
privateKey = (_bstr_t)privKey;
publicKey = (_bstr_t)pubKey;
// Sign key
headerObj->Sign((_bstr_t)privKey);
// Set protect object
_bstr_t header;
header = headerObj->Header;
protectObj->Header = header;
protectObj->Key = key.c_str();
protectObj->V1KeyID = keyID.c_str();
// start encrypt
protectObj->InputFile = _inFile.c_str();
protectObj->ProtectFile(_outFile.c_str());
}
catch (const _com_error& e) {
std::cerr << "COM Exception: "
<< e.ErrorMessage()
<< std::endl;
if (e.ErrorInfo())
std::cerr << (char*)e.ErrorInfo()
<< std::endl;
return false;
}
CoUninitialize();
return true;
}
// drm_test.cxx
#include "drm.h"
#include <iostream>
using namespace std;
int main() {
DRMObject* drmObj = new DRMObject("d:\\test.wma",
"d:\\test2.wma",
"http://localhost/test.asp",
"test corp");
if (drmObj->Encrypt()) {
cout << "KeyID: "
<< drmObj->keyID
<< endl;
cout << "Seed: "
<< drmObj->seed
<< endl;
cout << "Key: "
<< drmObj->key
<< endl;
cout << "ContentID: "
<< drmObj->contentID
<< endl;
cout << "Public Key: "
<< drmObj->publicKey
<< endl;
cout << "Private Key: "
<< drmObj->privateKey
<< endl;
}
delete drmObj;
}
转 http://www.cppblog.com/jb8164/archive/2008/02/27/43338.html
转载于:https://www.cnblogs.com/papam/archive/2009/08/26/1554715.html
运用 DRM 对流媒体文件加密相关推荐
- EZ-Lock易锁 DRM 文件加密保护系统
本产品应用范围: 使用目的在于防止企业内部人员,将机密文件非法复制窃取外流.举凡原始设计图纸.开发技术信息.客户往来信息等等.客户端计算机于编辑文件时,全程透明皆在加密环境下受到最严谨的保护,客 ...
- 猫抓m3u8,遇到该媒体已加密,请注意下载key文件
用到工具: 带有猫抓插件浏览器; 迅雷; 安装ffmpeg; 方案: 一.下载.ts视频文件.m3u8文件.key文件; 二.TS文件合并; 具体实施: 介绍m3u8加密: 简单一点说m3u8加密技术 ...
- FFmpeg 与媒体文件关系
1. 容器/文件(Container/File):即特定格式的多媒体文件,比如MP4,flv,mov等. 2. 媒体流(Stream):表示在时间轴上的一段连续的数据,比如一段声音数据.一段视频数据或 ...
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...
- Java文件操作大全(包括文件加密,String加密)
1.创建文件夹 //import java.io.*; File myFolderPath = new File(%%1); try { if (!myFolderPath.exists()) myF ...
- 文件下载时直接对流进行zip加密压缩
下载文件时直接对流进行zip加密压缩 1.使用form提交表单,请求下载.do 2.使用zip4j_1.3.1.jar <span style="white-space:pre&quo ...
- 各种数据文件加密和数字签名服务解决方案
各种数据文件是指非PDF格式文件和数据,因为PDF格式文件有数字签名和加密标准,所以,我们必须按照其标准实现数字签名和加密.而其他格式文件,如文本文件.图片文件.音频文件.视频文件.Office文件. ...
- Java 企业微信会话内容(聊天记录)存档功能实现,并获取媒体文件
注:本文档是在Linux环境下进行测试的. 今天终于有空来聊聊企业微信"会话内容存档",虽然官方有给出开发文档,但确实是有点晦涩难懂啊,对于我这种菜鸟来说. 在网上翻阅许多教程,也 ...
- 局域网网络监控和透明文件加密原理、需求、模式、实例、功能、部署、方案全攻略
关键词:局域网,网络监控,全攻略,监控软件,监控原理,网络监控软件,上网行为管理,内网管理,透明文件加密,反复制,信息安全,流量监控,网桥模式,QQ聊天记录监控,驱动,WINPCAP缺点 第一章 什么 ...
最新文章
- Delphi 与 DirectX 之 DelphiX(52): TDIB.DoSaturation();
- 在FreeBSD上安装Bugzilla
- linux下.rar的文件,Linux下.rar压缩文件处理 (RAR 4.11 for linux )
- [转载] 七龙珠第一部——第092话 孙悟空上场了
- (十三)react hooks
- Redis实战(十三)Redis的三种集群方式
- Ubuntu22.04(Linux Mint 21)安装使用绿联USB无线网卡CM448(rtl8821CU)的方法
- arcgis api for js绘制箭头图
- imitate wechat - 1
- JavaScript-162:表格隔行变色
- ThreadLocal原理及使用场景
- 如何在Windows系统上实现共享文件夹
- 关于风险管理,如何将思维从项目升维到项目群?
- Trunk支持vlan的范围
- [OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-上...
- 同步FIFO和异步FIFO的Verilog实现
- 随机森林计算特征重要性_随机森林中计算特征重要性的3种方法
- 比较两组数据的差异用什么图更直观_你真的懂如何展示数据吗?
- 新版标准日本语初级_第四十二课
- 解压oracle 失败,CentOS5.9 安装oracle 11g 遇到的各种问题
热门文章
- Matlab怎么计算信号的能量,学习用Matlab计算离散信号的功率和能量.PPT
- MySQL-排序加去重sql语句
- 产品分析必看!抖音App产品及竞品分析(快手)报告(最完善的商业分析、资料截止2019年5月)
- cdr存成html格式的文件格式,cad文件怎么转换成cdr格式
- luckysheet添加文本后缀(kg)、金额大写等单元格格式
- CentOS安装达梦数据库
- 计算机专业用苹果哪款笔记本,2019笔记本电脑排行榜 苹果笔记本电脑哪款好
- BroadcastReceiver
- php代码静态检查工具,代码静态检查工具汇总
- 常规加速乐cookie分析