19. Олексій (Alex1c) 17 10.10.13 16:09 Зараз в темі
Писав обробку для хешування по ГОСТ за допомогою стороннього EXE. Програма працювала через командний рядок. Необхідно було вказати їй шлях до файлу з даними на вхід. Вона генерітся вихідний файл з хешем.
Поимел проблему. У мене був тестовий файл і файл сгенеренний 1С, на вигляд абсолютно однакові. Різниця в розмірі в 2 байта. Хеш програма видавала різний. Виявилося що за замовчуванням 1С вказується символ перекладу рядка і при створенні файлу і при додаванні рядка. Вказав в обох місцях в якості символу "" і все пішло. Використовував багато ідей з цього поста. Можливо комусь буде корисний повний код.
// очистили входить файл
УдалітьФайли (КаталогВременнихФайлов () + "in.txt");
ТекстIn = Новий ЗапісьТекста (КаталогВременнихФайлов () + "in.txt", КодіровкаТекста.UTF8, "", Брехня,);
ТекстIn.ЗапісатьСтроку (Рядок (СокрЛП (ВРЕГ (ВходящіеДанние))));
ТекстIn.Закрить ();
// обрізаємо ВВП
ОБ_ДД = Новий ДвоічниеДанние (КаталогВременнихФайлов () + "in.txt");
Стр_Base64 = Base64Строка (ОБ_ДД);
ОБ_ДД = Base64Значеніе (Серед (Стр_Base64,5));
ОБ_ДД.Запісать (КаталогВременнихФайлов () + "in.txt");
// очистили вихідний файл
УдалітьФайли (КаталогВременнихФайлов () + "out.txt");
ТекстOut = Новий ЗапісьТекста (КаталогВременнихФайлов () + "out.txt", КодіровкаТекста.UTF8,, Брехня,);
ТекстOut.Закрить ();
// запустили додаток хеширования
ЗапустітьПріложеніе (Рядок (имяфайла) + "--gost-cryptopro" + КаталогВременнихФайлов () + "in.txt" + "" + "- output =" + КаталогВременнихФайлов () + "out.txt" ,, Істина,);
// прочитали з вихідного файлу результат
Текст = Новий ЧтеніеТекста (КаталогВременнихФайлов () + "out.txt", КодіровкаТекста.UTF8);
Стр = Текст.ПрочітатьСтроку ( ""); // при створенні файлу переклад рядка прибрали, при читанні теж прибрали, тобто читаємо весь файл як рядок