Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Ceridan  
#1 Оставлено : 2 августа 2013 г. 10:34:21(UTC)
Ceridan

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2013(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Здравствуйте!
Помогите пожалуйста решить проблему с получаемыми данными после снятия подписи.
Стоит задача: автоматически проверять и снимать ЭЦП, т.е. у пользователя есть файл, например, test.txt с текстом "hello" внутри. Он подписывает этот файл (совмещенная подпись), получается файл с подписью test.txt.sig и отправляет его на мой сервер. Мне необходимо написать утилиту, которая работает на сервере и на входе получает путь к файлу test.txt.sig и в тот же каталог, где расположен файл с подписью рядом кладет файл test.txt со снятой подписью.

Вот мой код для снятия подписи (на C#):
Код:

        private static void VerifyCombined(string fileName)
        {
            CAdESCOM.CadesSignedData signedData = new CAdESCOM.CadesSignedData();

            try
            {              
                string fileData = LoadFile(fileName);
                if (!string.IsNullOrEmpty(fileData))
                {
                    signedData.VerifyCades(fileData, CAdESCOM.CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, false);
                    string result = signedData.Content;

                    string resultFileName = fileName.Substring(0, fileName.LastIndexOf(".sig"));

                    using (StreamWriter writer = new StreamWriter(resultFileName))
                    {
                        writer.Write(result);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        private static string LoadFile(string fileName)
        {
            string result = null;

            if (File.Exists(fileName))
            {
                using (StreamReader reader = new StreamReader(fileName))
                {
                    result = reader.ReadToEnd();
                }
            }

            return result;
        }


В результате выполнения метода VerifyCombined проверка проходит успешно, но в signedData.Content я получаю вместо "hello" абракадабру. Пробовал играться с кодировками - не помогает. Пробовал также перед вызовом метода VerifyCades добавлять
Код:
signedData.ContentEncoding = CAdESCOM.CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;

И полученный результат писать с помощью BinaryWriter в файл, но это тоже ни к чему не приводит.

Я попробовал сам написать метод, который будет подписывать файл. Вот файл с подписью, получаемый после работы моего метода отлично проверяется, подпись снимается и я получаю корректный результат, но если я снимаю подпись, которая сделана с помощью клиента КриптоАРМ, настроенного по умолчанию, получается вот такая вот проблема, описанная выше.

Вопрос: может кто-то подсказать, как получить все-таки затерявшийся в процессе подписывания/снятие текст исходного файла test.txt?
Offline Новожилова Елена  
#2 Оставлено : 6 августа 2013 г. 13:04:09(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Цитата:
Пробовал также перед вызовом метода VerifyCades добавлять

Код:
signedData.ContentEncoding = CAdESCOM.CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;


И полученный результат писать с помощью BinaryWriter в файл, но это тоже ни к чему не приводит.


Полученный результат нужно декодировать из BASE64.
thanks 1 пользователь поблагодарил Новожилова Елена за этот пост.
Ceridan оставлено 06.08.2013(UTC)
Offline Ceridan  
#3 Оставлено : 6 августа 2013 г. 16:31:06(UTC)
Ceridan

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2013(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Спасибо за ваш ответ. Я делал декодирование, но делал в UTF8 и получал ерунду, при декодировании в кодировку по умолчанию данные стали корректно возвращаться после снятия ЭЦП.
Offline Новожилова Елена  
#4 Оставлено : 7 августа 2013 г. 11:54:25(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Нет-нет. Никакой кодировки по умолчанию не надо - декодируйте из BASE64 как бинарные данные и в файл пишите как бинарные данные. Или у вас подписаны могут быть только строки и только в кодировке по умолчанию?
Offline Ceridan  
#5 Оставлено : 9 августа 2013 г. 15:00:27(UTC)
Ceridan

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2013(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Да, понял, спасибо. Просто тренировался на текстовых файлах. А так в общем случае да, декодирование из BASE64 и полученный массив байт пишу в файл.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.