Замена CNG для CryptQueryObject

Мне интересно попытаться прочитать поля из цифровой подписи. У меня есть код, который вызывает CryptQueryObject, затем CryptMsgGetParam для получения некоторых полей и, наконец, CertFindCertificateInStore для загрузки сертификата.

Любые подсказки о том, как это сделать с помощью API криптографии следующего поколения? Microsoft говорит мне, что CryptQueryObject устарел, но не указывает на его замену.


person dockd    schedule 11.01.2018    source источник
comment
эй, вы когда-нибудь получали решение для этого?   -  person kidoman    schedule 18.01.2018
comment
Мы нашли решение на C#, которое работает. Проверьте c-sharp-implementation-to-get-signedcms-from -подписанный-файл   -  person Martin S    schedule 03.04.2019
comment
Неа; по-прежнему используют устаревшие API.   -  person dockd    schedule 04.04.2019


Ответы (1)


CryptDecodeObject[Ex] не помечен как устаревший. Просто говорю'.

Вы можете эмулировать логику определения типа большого двоичного объекта, вызывая CryptDecodeObjectEx в цикле с различными типами объектов, чтобы увидеть, какой из них не вызывает ошибки.

Тем не менее, если вы используете CryptQueryObject для анализа файла/блока данных (в отличие от определения его типа) и у вас есть хорошее представление о том, что это такое, посмотрите, есть ли константа типа субъекта для ваших данных. заблокировать под https://docs.microsoft.com/en-us/windows/win32/seccrypto/constants-for-cryptencodeobject-and-cryptdecodeobject

Как правило, функции CryptoAPI, работающие со структурами данных ASN.1 (сертификаты, CSR, CRL и т. п.), не устарели и не имеют аналога в CNG API. Может быть, этот был помечен как устаревший по ошибке.

person Seva Alekseyev    schedule 12.05.2020