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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline NeoEvgeny  
#1 Оставлено : 12 декабря 2022 г. 13:59:25(UTC)
NeoEvgeny

Статус: Новичок

Группы: Участники
Зарегистрирован: 11.11.2022(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 5 раз
Добрый день, всем!
Вот делаю отсоединенную подпись для файла data.txt (1kb) загружен 2 раз(а). с помощью команды:
Код:
csptest -sfsign -sign -in ./data.txt -out ./data.txt.p7s -my "" -detached -base64 -add

и получаю файл с подписью: data.txt.p7s (3kb) загружен 5 раз(а)..
А когда для того же файла делаю отсоединенную подпись с помощью api:

Код:
    // Открываем хранилище "Личное" сертификатов
    if (!( hCertStore = CertOpenSystemStore(NULL, TEXT("MY"))))
        MyHandleError("Store not opened.");
    // Поиск по отпечатку
    if(!(сontext = GetRecipientCert4Thumbprint(hCertStore, _tumbPrint)))
    {
        CertCloseStore(hCertStore, 0);
        MyHandleError("Cert not find.");
    }

    // Задаем параметры
    CRYPT_SIGN_MESSAGE_PARA signPara = { sizeof(signPara) };
    signPara.dwMsgEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
    signPara.pSigningCert = context;
    signPara.HashAlgorithm.pszObjId = (LPSTR) szOID_CP_GOST_R3411_12_256;
    signPara.cMsgCert = 1;
    signPara.rgpMsgCert = &context;
    signPara.dwFlags = CPCRYPT_MESSAGE_CADES_DISABLE;

    CADES_SIGN_PARA cadesSignPara = { sizeof(cadesSignPara) };
    cadesSignPara.dwCadesType = CADES_BES; // Указываем тип усовершенствованной подписи CADES_BES

    CADES_SIGN_MESSAGE_PARA para = { sizeof(para) };
    para.pSignMessagePara = &signPara;
    para.pCadesSignPara = &cadesSignPara;

    // Формируем данные для подписания
    vector<unsigned char> data;
    ReadFileToVector(_filenameSrc, data);
    const unsigned char *pbToBeSigned[] = { &data[0] };
    DWORD cbToBeSigned[] = { (DWORD)data.size() };

    PCRYPT_DATA_BLOB pSignedMessage = 0;
    // Создаем подпись
    if (!CadesSignMessage(&para, TRUE, 0, pbToBeSigned, cbToBeSigned, &pSignedMessage))
    {
        cout << "CadesSignMessage() failed" << endl;
        return -1;
    }

    vector<unsigned char> message(pSignedMessage->cbData);
    copy(pSignedMessage->pbData, pSignedMessage->pbData + pSignedMessage->cbData, message.begin());

    // Сохраняем результат в файл
    if (SaveVectorToFile<unsigned char>(_filenameDst, message))
    {
        cout << "Signature was not saved" << endl;
        return -1;
    }

    cout << "Signature was saved successfully" << endl;

    // Освобождаем структуру с закодированным подписанным сообщением
    if (!CadesFreeBlob(pSignedMessage))
    {
        cout << "CadesFreeBlob() failed" << endl;
        return -1;
    }


Получаю такой файл с подписью: data.txt.p7s (2kb) загружен 3 раз(а).
Помогите разобраться со следующими вопросами:
1) Почему разные размеры файлов с подписями?
2) И почему у них разные форматы в записи внутри файла, может кодировка влияет?
3) Как мне сделать также как "csptest" делает?
4) И правильно ли все сделано?
Offline Андрей Русев  
#2 Оставлено : 12 декабря 2022 г. 15:31:49(UTC)
Русев Андрей

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,578

Сказал(а) «Спасибо»: 47 раз
Поблагодарили: 663 раз в 458 постах
Здравствуйте.
1 и 2: потому что вы указали -base64 в аргументах csptest
3 и 4: так как вы создаёте сообщение в формате CADES_BES, вместо CadesSignMessage проще использовать CryptSignMessage, что и делает csptest -sfsign. Так у вас не будет лишней зависимости от cades-библиотек, а результат будет одинаковый.
Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
NeoEvgeny оставлено 15.12.2022(UTC)
Offline TolikTipaTut1  
#3 Оставлено : 12 декабря 2022 г. 15:33:20(UTC)
TolikTipaTut1

Статус: Активный участник

Группы: Участники
Зарегистрирован: 05.07.2018(UTC)
Сообщений: 468

Сказал(а) «Спасибо»: 43 раз
Поблагодарили: 69 раз в 61 постах
Выше уже ответили XD

Отредактировано пользователем 12 декабря 2022 г. 15:33:52(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.