С помощью коллег с Мисты разобрался... В принципе, обработка в исходном виде, как скачана с ИнфоСтарта, подписывает и шифрует правильно. Но, сохраняет файлы с BOM(Byte order mark), первые два символа с кодами 254 и 255. Если просматривать файлы например FAR-ом, то первые символы файла выглядят как "юя", а должно начинаться с "0". Может быть ФСРАРовский сайт и проглотит такие файлы, не знаю, не пробовал. Но, тот-же КриптоАРМ вываливается с ошибкой "Неверный формат". Экспериментировать с подачей таких файлов в РАР возможности уже не было, пока разбирался, декларации уже все сдали.
Поэтому, на будущее, решил разобраться, как записывать файлы без BOM.
Тут два варианта:
1. Написал универсальную функцию, которая вырезает эти символы из готовых файлов, код на VBS такой:
|Set objFSO = CreateObject(""Scripting.FileSystemObject"")
|Set writer = CreateObject(""Adodb.Stream"")
|Set reader = CreateObject(""Adodb.Stream"")
|reader.Open
|reader.LoadFromFile OutFileName
|writer.Mode=3
|writer.Type=1
|writer.Open
|reader.position=2
|reader.copyto writer,-1
|writer.SaveToFile OutFileName,2
|Set writer = Nothing
|Set reader = Nothing
Добавляется в конец функций подписи и шифрования. Работает нормально, КриптоАРМ открывает, расшифровывает(если конечно свой сертификат в получатели добавить), снимает подпись и сохраняет файл в исходном виде.
2. Вариант 2, более простой и красивый, предложил коллега NorthWind с Мисты:
Данные после подписи или шифрования преобразуем в массив байтов методом самого CAPICOM - BinaryStringToByteArray объекта Utilities, и потом записываем в файл как бинарный поток.
Вот код JS-скрипта шифрования, в подписи надо сделать аналогично:
Код = "function CryptFile(FileName,Recipients,OutFileName)
|{
| InStream=new ActiveXObject(""ADODB.Stream"");
| InStream.Type=1; // binary data
| InStream.Mode=3; // read/write
| InStream.Open();
| InStream.LoadFromFile(FileName);
| InData=InStream.Read(-1);
|
| EnvelopedData=new ActiveXObject(""CAPICOM.EnvelopedData"");
| EnvelopedData.Content=InData;
| for (var i=1; i<=Recipients.Count; i++) {EnvelopedData.Recipients.Add(Recipients.Item(i));}
| OutEnvelopedData=EnvelopedData.Encrypt(1);
|
| Util = new ActiveXObject(""CAPICOM.Utilities"");
| BinArr = Util.BinaryStringToByteArray(OutEnvelopedData);
|
| OutStream=new ActiveXObject(""ADODB.Stream"");
| OutStream.Type=1; // binary data
| OutStream.Mode=3; // read/write
| OutStream.Open();
| OutStream.Write(BinArr);
| OutStream.SaveToFile(OutFileName,2);
| OutStream.Close();
|
| return(0);
|}
|";
После этого, тоже все красиво читается, расшифровывается КриптоАРМом и т.д.
PS Вполне возможно, что это все не обязательно, и ФСРАР проглотил бы файлы и с BOM, но, как-то так красивее и приятнее... В конце концов, тот-же рекомендованый ФСРАРом КриптоАРМ и другие программы пишут файлы без BOM, значит так будет правильнее.
PS Если кого-то заинтересовало, пишите, расскажу подробнее. Саму обработку не выкладываю, не имею морального права, так, как она на ИнфоСтарте за СтартМани распространяется.