Статус: Новичок
  Группы: Участники
 Зарегистрирован: 14.12.2020(UTC) Сообщений: 3   
	 
	
     | 
    
        
            
		      
                пытаюсь подписать сообщение на lazarus с помощью cades plugin:
 
  function  SignData(bl_Detached: boolean;  S_in: ANSIString; var S_out: AnsiString; g_Cert:OleVariant; g_Cert_Pass:string) :boolean; const       CADESCOM_CADES_TYPE = 1;  // Тип усовершенствованной подписи       CADESCOM_BASE64_TO_BINARY = 1; var    v_Signer, v_SignedData : Variant;
  begin   Result := False;   try     v_Signer    := CreateOLEObject('CadesCOM.CPSigner');     v_Signer.Certificate := g_Cert;
      if g_Cert_Pass<>'' then        v_Signer.KeyPin := g_Cert_Pass;
      v_Signer.Options := 1;// CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN := 1;
      V_SignedData := CreateOLEObject('CAdESCOM.CadesSignedData');
      v_SignedData.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
      s_in := EncodeStringBase64(s_in);     v_SignedData.Content := s_in;     s_out := v_SignedData.SignCades(v_Signer, CADESCOM_CADES_TYPE, bl_Detached,0);
      Result := True;   finally     if not VarIsNull(v_Signer)       then v_Signer := Unassigned;     if not VarIsNull(v_SignedData)   then v_SignedData := Unassigned;   end; end;  
  на этапе v_SignedData.Content := s_in; получаю ошибку "Параметр задан не верно".
  на входе: s_in := 'LTHNSNHGVUSLTDARDNXDKZATUJHTBK';
  в base64: TFRITlNOSEdWVVNMVERBUkROWERLWkFUVUpIVEJL
  что я делаю не так? уже голову сломал... в delphi вся конструкция работает нормально. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                Автор: wwq  пытаюсь подписать сообщение на lazarus с помощью cades plugin:
 
  function  SignData(bl_Detached: boolean;  S_in: ANSIString; var S_out: AnsiString; g_Cert:OleVariant; g_Cert_Pass:string) :boolean;  что я делаю не так? уже голову сломал... в delphi вся конструкция работает нормально.  ANSIString нет в COM. Цитата: S_in: ANSIString; var S_out: AnsiString 
  Заменить на WideString и всё заработает.   Snimok ehkrana ot 2021-04-24 00-11-42.png  (19kb) загружен 15 раз(а).   | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 14.12.2020(UTC) Сообщений: 3   
	 
	
     | 
    
        
            
		      
                да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 ))) 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                Автор: wwq  да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))  а теперь попробовать с ANSIString запустить код...    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 14.12.2020(UTC) Сообщений: 3   
	 
	
     | 
    
        
            
		      
                Автор: Андрей *  Автор: wwq  да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))  а теперь попробовать с ANSIString запустить код...  уже в работе gateway для честного знака (подписывает/преобразует запросы и т.д.), клиенты на win2k3/winxp/linux сервер на win10  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                Автор: wwq  Автор: Андрей *  Автор: wwq  да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))  а теперь попробовать с ANSIString запустить код...  уже в работе gateway для честного знака (подписывает/преобразует запросы и т.д.), клиенты на win2k3/winxp/linux сервер на win10  и там указано как есть в коде и ничего больше не менялось? Т.е. Я зря ставил\собирал и воспроизвёл? Не может быть такого)  Lazarus "из коробки" и код при вызове приведёт к такому:   Snimok ehkrana ot 2021-05-26 19-07-02.png  (51kb) загружен 11 раз(а). обращаем внимание на 65 строку, меняем всё и в функции на правильный тип - WideString и получаем подпись:     Snimok ehkrana ot 2021-05-26 19-13-17.png  (37kb) загружен 10 раз(а).   | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.07.2021(UTC) Сообщений: 13
  Сказал(а) «Спасибо»: 6 раз
  
	 
	
     | 
    
        
            
		      
                Автор: wwq  пытаюсь подписать сообщение на lazarus с помощью cades plugin:
 
  function  SignData(bl_Detached: boolean;  S_in: ANSIString; var S_out: AnsiString; g_Cert:OleVariant; g_Cert_Pass:string) :boolean; const       CADESCOM_CADES_TYPE = 1;  // Тип усовершенствованной подписи       CADESCOM_BASE64_TO_BINARY = 1; var    v_Signer, v_SignedData : Variant;
  begin   Result := False;   try     v_Signer    := CreateOLEObject('CadesCOM.CPSigner');     v_Signer.Certificate := g_Cert;
      if g_Cert_Pass<>'' then        v_Signer.KeyPin := g_Cert_Pass;
      v_Signer.Options := 1;// CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN := 1;
      V_SignedData := CreateOLEObject('CAdESCOM.CadesSignedData');
      v_SignedData.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
      s_in := EncodeStringBase64(s_in);     v_SignedData.Content := s_in;     s_out := v_SignedData.SignCades(v_Signer, CADESCOM_CADES_TYPE, bl_Detached,0);
      Result := True;   finally     if not VarIsNull(v_Signer)       then v_Signer := Unassigned;     if not VarIsNull(v_SignedData)   then v_SignedData := Unassigned;   end; end;  Подскажите, а параметр g_Cert:OleVariant как заполнить? Т.е. как получить сертификат? И g_Cert_Pass:string - это пароль на подпись?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                g_Cert - получить перечислением с сверкой нужных атрибутов или через .Find у хранилища сертификатов. Если не указывать - будет диалог ОС выбора сертификата. Цитата: с помощью cades plugin
  Это CAdESCOM, плагин это для браузеров...    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
         | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.07.2021(UTC) Сообщений: 13
  Сказал(а) «Спасибо»: 6 раз
  
	 
	
     | 
    
        
            
		      
                Автор: Андрей *  g_Cert - получить перечислением с сверкой нужных атрибутов или через .Find у хранилища сертификатов. Если не указывать - будет диалог ОС выбора сертификата. Цитата: с помощью cades plugin
  Это CAdESCOM, плагин это для браузеров...  Пробую без указания сертификата, на выходе вроде красиво, но результат не соответствует ожидаемому и в процессе не запрашивает выбор сертификата :( Не запрашивает, возможно потому, что он единственный, но почему подпись отличается от подписи ч-з  https://www.cryptopro.ru...ge/cades_bes_sample.html непонятно... Подскажете, где искать ошибку? Может надо конвертировать ч-то ещё? Код:
function SignData(bl_Detached: boolean; S_in: WideString; var S_out: WideString ; g_Cert:OleVariant; g_Cert_Pass:string) :boolean;
const
  CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
  CADESCOM_BASE64_TO_BINARY = 1;
var
  v_Signer, v_SignedData : Variant;
  s, Encoded: string;
  Base64: TBase64Encoding;
begin
  Result := False;
  try
    v_Signer := CreateOLEObject('CadesCOM.CPSigner');
    
    //v_Signer.Certificate := g_Cert; [b]// Сертификат не указан[/b]
    if g_Cert_Pass<>'' then
    v_Signer.KeyPin := g_Cert_Pass;
    v_Signer.Options := 1;// CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN := 1;
    V_SignedData := CreateOLEObject('CAdESCOM.CadesSignedData');
    v_SignedData.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
    Base64 := TBase64Encoding.Create(0);
    s_in := Base64.Encode(s_in);
    v_SignedData.Content := s_in;
    s_out := v_SignedData.SignCades(v_Signer, CADESCOM_CADES_TYPE, bl_Detached,0);
    Result := True;
  finally
    if not VarIsNull(v_Signer) then v_Signer := Unassigned;
    if not VarIsNull(v_SignedData) then v_SignedData := Unassigned;
  end;
end;
 
 так вызываю ф-цию SignData и результат отличается от  https://www.cryptopro.ru...e/cades_bes_sample.html#Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  si,so: WideString;
begin
  si := edtString.Text;
  SignData(True, si, so, null, '');
  mmo1.Text := so;
end;
 
  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close