Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.06.2014, 17:37
Новичок на форуме
Отправить личное сообщение для Codenewman Посмотреть профиль Найти все сообщения от Codenewman
 
Регистрация: 21.06.2014
Сообщений: 2

подпись word документа
Здравствуйте!

Возникла необходимость подписывать Word документы, созданные в процессе работы. Использую плагин Крипто Про Browser plugin.

<script type="text/javascript">
RunPlugin();

    var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;
    var CAPICOM_CURRENT_USER_STORE = 2;
    var CAPICOM_MY_STORE = "My";
    var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
    var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;

    function FillCertList(lstId) {

        var oStore = CreateObject("CAPICOM.store");

        if (!oStore) {
            alert("store failed");
            return;
        }

        try {
            oStore.Open();
        }
        catch (e) {
            alert("Ошибка при открытии хранилища: " + GetErrorMessage(e));
            return;
        }

        var certCnt = oStore.Certificates.Count;

        var lst = document.getElementById(lstId);    
        for (var i = 1; i <= certCnt; i++) {
            var cert;
            try {
                cert = oStore.Certificates.Item(i);
            }
            catch (ex) {
                alert("Ошибка при перечислении сертификатов: " + GetErrorMessage(ex));
                return;
            }

            var oOpt = document.createElement("OPTION");
            try {
                oOpt.text = cert.SubjectName;
            }
            catch (e) {
                alert("Ошибка при получении свойства SubjectName: " + GetErrorMessage(e));
            }
            try {
                oOpt.value = cert.Thumbprint;
            }
            catch (e) {
                alert("Ошибка при получении свойства Thumbprint: " + GetErrorMessage(e));
            }

            lst.options.add(oOpt);
        }

        oStore.Close();
    }

    function GetErrorMessage(e) {
        var err = e.message;
        if (!err) {
            err = e;
        } else if (e.number) {
            err += " (" + e.number + ")";
        }
        return err;
    }

    function CreateObject(name) {
        switch (navigator.appName) {
            case 'Microsoft Internet Explorer':
            return new ActiveXObject(name);
            default:
            var userAgent = navigator.userAgent;
            if (userAgent.match(/Trident\/./i)) { // IE10, 11
                return new ActiveXObject(name);
        }

        var cadesobject = document.getElementById('cadesplugin');

        return cadesobject.CreateObject(name);
        }
    }

    function SignCreate(oCertificate, dataToSign) {
    
        var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;
   
        var oSigner = CreateObject("CAdESCOM.CPSigner");
        oSigner.Certificate = oCertificate;
        oSigner.TSAAddress = "http://cryptopro.ru/tsp/";

        var oSignedData = CreateObject("CAdESCOM.CadesSignedData");
        oSignedData.Content = dataToSign;       

        try {
            var sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_X_LONG_TYPE_1);
        } catch (err) {
            alert("Failed to create signature. Error: " + GetErrorMessage(err));
            return;
        }
        
        return sSignedMessage;
    }

    function Verify(sSignedMessage) {
              
        var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;      
               
        var oSignedData = CreateObject("CAdESCOM.CadesSignedData");
  
        try {
            oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_X_LONG_TYPE_1);
        } catch (err) {
            alert("Failed to verify signature. Error: " + GetErrorMessage(err));
            return false;
        }

        return true;
    }

    function selectCertificate() {
        
        var CAPICOM_STORE_OPEN_READ_ONLY = 0;
        var CAPICOM_CURRENT_USER_STORE = 2;
        
        try {
            var CertStore = CreateObject("CAPICOM.Store");
        } catch (err) {
            alert('Failed to create CAPICOM.store: ' + err.number);
            return;
        }
        //Открываем хранилище сертификатов пользователя только для чтения 
            CertStore.Open(CAPICOM_CURRENT_USER_STORE, "MY", CAPICOM_STORE_OPEN_READ_ONLY);
            //Выводим пользователю окно выбора сертификата 
        try {
            var certificate = CertStore.Certificates.Select( 
            "Выберите сертификат для подписи документа."
            , "Выберите один из сертификатов", false);
        }
        catch (e)
        {
            alert('ошибка сертификат'+ e.message);
            // Пользователь не выбрал сертификат
        }
        return certificate.Item(1);
    }

    function RunPlugin() {
        
        //FillCertList('ctl00_ContentPlaceHolder1_CertListBox');
           
        var oCertificate = selectCertificate();

        var signedMessage = SignCreate(oCertificate, "Message");
        //alert(signedMessage); 

        var verifyResult = Verify(signedMessage);
  
        if (verifyResult) {
            alert("Signature verified");
        }
    }
</script>


Скажите пожалуйста как подписать word документ. В моем примере подписывается сообщение:
var signedMessage = SignCreate(oCertificate, "Message");


Как я понимаю необходимо данные signedMessage засунуть во вновь созданный word документ. Но вот работа javascript с файлами идет туго. Подскажите пожалуйста...

Заранее спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Документ внутри документа begin29 Events/DOM/Window 4 23.03.2013 21:31
Проблема повторного открытия Word в фоновом режиме discribe Общие вопросы Javascript 9 13.04.2012 18:22
Размер документа во фрейме mcfly Элементы интерфейса 0 04.06.2011 18:14
Не срабатывает при отсутствии в теле документа yuriii jQuery 3 06.05.2010 17:45
Узнать Height всего открытого документа viod Events/DOM/Window 4 09.10.2008 13:07