Пример работы наложение КА и шифрации в автоматическом режиме.

Автор:Izmajlov
Дата:15.12.2011
Просмотров:7056
Скачиваний:1037
Оценка:, Оценок - 2
Скачать (zip-файл; Размер - 1568)

Обсудить в форуме

Описание

Актуально для банков, которые используют для КА и шифрации СКЗИ "Верба"

Если файл подписывается и шифруется ключами находящимся на одной дискете, то тут проблем не возникает
есть командная строка (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();
}