Автор: Андрей * https://docs.cryptopro.ru/cades/plugin/plugin-samples/plugin-samples-sign-detached
ОК. Спасибо. Как я понимаю, то я должен уже получившуюся кодированную строку в Base64 (которая у меня уже формируется на сервере), например PD94bWwgIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PjzU4OnrIMjk1O и дальше много символов (в районе 9000) подписать. Посмотрел код на JavaScript (синхронная версия). Переписал на Delphi. Код пока достаточно "сырой", но тестировать уже можно
procedure TForm1.Button12Click(Sender: TObject);const CAPICOM_LOCAL_MACHINE_STORE = 1;
CAPICOM_STORE_OPEN_READ_ONLY = 0;
CAPICOM_CERTIFICATE_FIND_SHA1_HASH: byte =0;
CADESCOM_BASE64_TO_BINARY = 1;
CADESCOM_CADES_BES = 1;
var Store, Certs, Cert, Signer, SignedData: Olevariant;
Base64Out: widestring; //Выходные подписанные данные, которые я предполагаю получить.
begin
try
Store:=CreateOleObject('CADESCOM.Store');
Store.Open(CAPICOM_LOCAL_MACHINE_STORE, 'My', CAPICOM_STORE_OPEN_READ_ONLY);
Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH,'hghghhed2806eb7235a7be9557471d1315eefdgg');// hghghhed2806eb7235a7be9557471d1315eefdgg - это отпечаток сертификата.
Cert:=Certs.Item[1];
Signer:=CreateOleObject('CADESCOM.CPSigner');
Signer.Options:=1;
Signer.Certificate:=Cert;
SignedData:=CreateOleObject('CAdESCOM.CadesSignedData');
SignedData.ContentEncoding:=CADESCOM_BASE64_TO_BINARY;
SignedData.Content:=memo1.Text; //В memo1.text хранятся данные в BASE64 (закодированные от XML), которые получены от сервера
Base64Out:=SignedData.SignCades(Signer, CADESCOM_CADES_BES, true);
memo2.Text:=Base64Out; //Здесь я ожидаю чуда, т.е. подписанные данные в BASE64, которые смогу передать в POST-запросе
SignedData:=UnAssigned;
Signer:=UnAssigned;
Store:=UnAssigned;
except
On E:Exception do
begin
ShowMessage(E.Message);
SignedData:=UnAssigned;
Signer:=UnAssigned;
Store:=UnAssigned;
end;
endP.S. Протестировать смогу только завтра. Спасибо.
Отредактировано пользователем 2 апреля 2023 г. 23:40:28(UTC)
| Причина: Не указана