Статус: Новичок
Группы: Участники
Зарегистрирован: 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(¶, 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) И правильно ли все сделано?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,578
Сказал(а) «Спасибо»: 47 раз Поблагодарили: 663 раз в 458 постах
|
Здравствуйте. 1 и 2: потому что вы указали -base64 в аргументах csptest 3 и 4: так как вы создаёте сообщение в формате CADES_BES, вместо CadesSignMessage проще использовать CryptSignMessage, что и делает csptest -sfsign. Так у вас не будет лишней зависимости от cades-библиотек, а результат будет одинаковый. |
|
 1 пользователь поблагодарил Русев Андрей за этот пост.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.07.2018(UTC) Сообщений: 468
Сказал(а) «Спасибо»: 43 раз Поблагодарили: 69 раз в 61 постах
|
|
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close