функция GetFileSigns. как прочитать поле?

Автор danver, 12.11.20, 05:35:58

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

danver

Здравствуйте!
В API Лоцмана есть функция GetFileSigns для работы с ЭЦП, в выходных данных есть поле: [_SIGN] image – подписи файла;
Данные содержатся в формате blob - binary large object, не получается их прочитать никаким способом. Что там? В какой тип дельфи передать можно, и как?


teplinskiy

#1
[_SIGN] Image - это тип поля в SQL сервер, содержит любые двоичные данные.
Работать с параметром нужно как с массивом байт или с помощью мемористрим.
В Delphi можно использовать TBlobStream.

С просторов тырнета варианты:
--------------------------------------------------
var
S: TStream;
Bs: TBlobStream;
Ms: TMemoryStream;

***
S:=Table1.CreateBlobStream(Table1.FieldByName("Info"),bmRead);
Bs:=TBlobStream(Table1.CreateBlobStream(Table1.FieldByName("Info"),bmRead));
Ms:=TMemoryStream(Table1.CreateBlobStream(Table1.FieldByName("Info"),bmRead));
***
--------------------------------------------------

Не нужно забывать и о освобождении, ".Free" в помощь.

Chaa

Цитата: danver от 12.11.20, 05:35:58Данные содержатся в формате blob - binary large object, не получается их прочитать никаким способом. Что там?
Для версии 2014+ там байты подписи в формате CAPICOM. Например, их можно передать вместе с содержимым файла в ISignedData, чтобы проверить подпись.
Если версия моложе, то чуть сложнее, но тоже можно.

nnspu

В этом поле хранятся данные ЭЦП формате отсоединенной подписи.
Используется нотация Asn.1
Мы для работы с этими данными использовали как стандартные возможности .Net, так и сторонние фреймворки(Mono, Bouncy Castle). Можно разбирать дерево сигнатуры самостоятельно, но, не смотря на увлекательность этого процесса, это слишком долго.
Мне больше всего понравилось работать с ЭЦП через Bouncy Castle