• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 60, 文章 - 0, 評論 - 197, 引用 - 0
            數(shù)據(jù)加載中……

            運(yùn)用 DRM 對流媒體文件加密

            以前用 C++ 做過的 DRM 項目,現(xiàn)抽取出其中核心的代碼, 演示一下如何借助 DRM 對流媒體文件進(jìn)行保護(hù)。
            雖然微軟的 DRM 技術(shù)被破解了, 但那是以用戶通過認(rèn)證并下載證書為前提的。由是觀之, 運(yùn)用 DRM 對流媒體
            文件施以保護(hù)仍有一定意義,這畢竟比什么都不做要強(qiáng)嘛!

            /* 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;
            }

            posted on 2008-02-27 15:28 Normandy 閱讀(2368) 評論(2)  編輯 收藏 引用 所屬分類: Programming

            評論

            # re: 運(yùn)用 DRM 對流媒體文件加密  回復(fù)  更多評論   

            great! this's what I need
            2008-02-27 17:55 | ring

            # re: 運(yùn)用 DRM 對流媒體文件加密  回復(fù)  更多評論   

            您好!我想購買一套代碼。功能不像drm版權(quán)保護(hù)那么多,難度大。請及時聯(lián)系我,細(xì)談qq 987105852
            2008-12-03 22:14 | jima
            久久综合久久美利坚合众国| 99精品久久久久久久婷婷| 久久亚洲中文字幕精品一区| 精品久久久久久无码免费| 国产精品久久国产精品99盘| 久久综合综合久久综合| 中文精品久久久久人妻不卡| 狠狠综合久久综合88亚洲| 一本色道久久综合| 精品久久久久久中文字幕大豆网| 一本久久a久久精品亚洲| 中文字幕久久波多野结衣av| 久久久久高潮毛片免费全部播放| 潮喷大喷水系列无码久久精品| 国产91久久精品一区二区| 久久久久四虎国产精品| 久久国产精品无码HDAV| 久久精品国产福利国产秒| 久久亚洲高清观看| 久久亚洲AV无码西西人体| 久久只有这里有精品4| 色婷婷综合久久久久中文一区二区| 久久发布国产伦子伦精品| 国产精品欧美久久久久天天影视| 中文字幕无码久久人妻| 亚洲精品乱码久久久久久按摩 | 日本加勒比久久精品| 伊色综合久久之综合久久| 99久久99这里只有免费费精品| 日本精品久久久久中文字幕| 一本大道久久东京热无码AV| 日本久久久久亚洲中字幕| 一本久久知道综合久久| 无码国产69精品久久久久网站| 精品多毛少妇人妻AV免费久久| 欧美久久久久久| 国产精品免费看久久久香蕉| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久久久久精品无码人妻| 久久超碰97人人做人人爱| 亚洲七七久久精品中文国产|