Пример работы наложение КА и шифрации в автоматическом режиме.
Скачать (zip-файл; Размер - 1568)Обсудить в форуме
Описание
Актуально для банков, которые используют для КА и шифрации СКЗИ "Верба"
Если файл подписывается и шифруется ключами находящимся на одной дискете, то тут проблем не возникает
есть командная строка (scsignex -s -fИмяФайла -- КА, scsignex -e -aХХХ -fИмяФайла -- шифрация)
Но в случае шифрации на других ключах (которые находятся в другом дисководе), то возникает вопрос - как поменять дискету??
Предлагается пример автоматизации таких операций.
Как указал выше - условие работы скрипта - наличие на компьютере 2(двух) дисководов- А:\ и В:\
С уважением,
Измайлов Ф.В.
Если файл подписывается и шифруется ключами находящимся на одной дискете, то тут проблем не возникает
есть командная строка (scsignex -s -fИмяФайла -- КА, scsignex -e -aХХХ -fИмяФайла -- шифрация)
Но в случае шифрации на других ключах (которые находятся в другом дисководе), то возникает вопрос - как поменять дискету??
Предлагается пример автоматизации таких операций.
Как указал выше - условие работы скрипта - наличие на компьютере 2(двух) дисководов- А:\ и В:\
С уважением,
Измайлов Ф.В.
Текст примера
/******************************************************************/ /* Пример работы с ключами ЭЦП и шифрации в автоматическом режиме */ /* Измайлов Ф.В., Кузин А.Г. */ /* 2011, Москва */ /******************************************************************/ var fso = new ActiveXObject("Scripting.FileSystemObject"); var oShell = WScript.CreateObject("WScript.Shell"); var dstFolder = "c:\\Каталог в котором находится файл"; var nFile = "\\Имя файла для отправки"; // 1000 - это 1 секунда var Delay = 2000; // 2 sec /* Проверяем есть ли файл для обработки */ if(fso.FileExists(dstFile+nFile){ obFile = fso.GetFile(dstFile+nFile); }else{ WScript.echo("File don't exists"); WScript.quit() } /* Создаем файл-лог */ var logName = currPath+"\\work_file.log"; if(!fso.FileExists(logName)){ fso.CreateTextFile(logName); } /* Открываем для записи (дополнения) */ try{logFile = fso.OpenTextFile(logName,8);}catch(e){} try{logFile.WriteLine(d1.toLocaleString()+" - старт");}catch(e){} /* Подписываем на дискете А: - шифруем на дискете в В: */ /* с какой дискеты будет считываться значения ключей */ /* определяется двумя параметрами из реестра :) */ /* смотрим и запоминаем старые значения реестра */ try{ KeyDev = oShell.RegRead("HKEY_CURRENT_USER\\Software\\SCSign\\KeyDev"); } catch(e) { logFile.WriteLine("Не удалось найти в реестре компьютера запись HKEY_CURRENT_USER\\Software\\SCSign\\KeyDev"); WScript.quit(); } /* смотрим и запоминаем старые значения реестра */ try{KeyPath = oShell.RegRead("HKEY_CURRENT_USER\\Software\\SCSign\\keyPath");} catch(e) { logFile.WriteLine("Не удалось найти в реестре компьютера запись HKEY_CURRENT_USER\\Software\\SCSign\\KeyPath"); WScript.quit(); } /* Если дискета с ключами для ЭЦП (КА) в дисководе А:, а в реестре не А: то... */ if(KeyDev!="a:\\"){ oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyDev", "a:\\", "REG_SZ"); oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyPath", "a:\\", "REG_SZ"); } /* Для 100% уверенности в успешности операции по КА - сравнивать будем размер файла, ДО и ПОСЛЕ */ var oldSize = obFile.size; /* ПОДПИСЫВАЕМ !!! */ retCode = oShell.Run("scsignex -s -f"+dstFolder+obFile.name,2,true); /* Задержку на всякий случай */ WScript.sleep(Delay); /* Размер файла после операции */ var newFile = fso.GetFile(dstFolder+obFile.name); var newSize = newFile.size; newFile = null; /* проставили КА успешно !!!! */ if(oldSize!=newSize) { try{logFile.WriteLine("Подписан файл "+obFile.name);}catch(e){} } else { logFile.WriteLine("Не удалось подписать файл "+obFile.name); logFile.WriteLine("Работа скрипта прекращена "); sendAlertMail("Error KA","Не удалось подписать файл "+obFile.name); WScript.quit(); } /* шифруем, для этого меняем в реестре ключи на B:\ */ try{ oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyDev", "b:\\", "REG_SZ"); } catch(e){ logFile.WriteLine("Не удалось записать в реестр значение HKEY_CURRENT_USER\\Software\\SCSign\\KeyDev");logFile.WriteLine("Работа скрипта прекращена "); WScript.quit(); } try{ oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyPath", "b:\\", "REG_SZ"); } catch(e){ logFile.WriteLine("Не удалось записать в реестр значение HKEY_CURRENT_USER\\Software\\SCSign\\KeyPath");logFile.WriteLine("Работа скрипта прекращена "); WScript.quit(); } /****************** шифруем ********************/ var oldSize = obFile.size; /* шифруем. Необходимо узнать номер КЛЮЧА в базе - вместо ХХХ свой номер 200,210,220 к примеру.. */ retCode = oShell.Run("scsignex -e -aХХХ -f"+dstFolder+obFile.name,2,true); WScript.sleep(Delay); var newFile = fso.GetFile(dstFolder+obFile.name); var newSize = newFile.size; newFile = null; /* Если все удачно */ if(oldSize!=newSize) { logFile.WriteLine("Зашифрован файл "+obFile.name); WScript.sleep(Delay); oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyDev", "a:\\", "REG_SZ"); oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyPath", "a:\\", "REG_SZ"); } else{ logFile.WriteLine("Не удалось зашифровать файл "+obFile.name); logFile.WriteLine("Работа скрипта прекращена "); oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyDev", "a:\\", "REG_SZ"); oShell.RegWrite("HKEY_CURRENT_USER\\Software\\SCSign\\KeyPath", "a:\\", "REG_SZ"); WScript.quit(); }