Форум КриптоПро
	 » 
	Средства криптографической защиты информации
	 » 
	КриптоПро .NET
	 » 
	Аналог выполнения команды "csptest.exe -sfsign -sign..." с помощью SignedCms.ComputeSignature в Net
	 
	
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 29.09.2016(UTC) Сообщений: 15  Сказал(а) «Спасибо»: 4 раз
  
	 
	
     | 
    
        
            
		      
                Добрый день, возникла задача в проекте .Net разрабатываемом на VS2013 в разработке модуля для подписи полученного 32-битного хэша файла. Аналог работы данного модуля команда в командной строке: csptest.exe -sfsign -sign -add -detached -my Иванов Иван Иванович 111111111 -password 1111 -in c:\hash64 -out C:\Sign1 
  В методе в модуле использую следующий код:
   // create ContentInfo  ContentInfo content = new ContentInfo(HashValue);
   // SignedCms represents signed data  SignedCms signedMessage = new SignedCms(content, true);
 
   // create a signer  CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, certificate);
   // sign the data  signedMessage.ComputeSignature(signer);
   // create PKCS #7 byte array  byte[] signedBytes = signedMessage.Encode();  string signedBytesStr = Convert.ToBase64String(signedBytes);		
  При отправке сервису сообщение с подписью signedBytesStr получаю ошибку "Отсутствует или некорректная электронная подпись". Если сервису отправляю строку ЭП полученную из файла "C:\Sign1", предварительно выполнив команду csptest.exe -sfsign, то сообщение проходит валидацию. 
  Прошу помочь специалистов в решении проблемы... 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                Первое предположение - в HashValue лежит не то, что в c:\hash64. signedBytesStr получается с помощью csptest проверить?    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 29.09.2016(UTC) Сообщений: 15  Сказал(а) «Спасибо»: 4 раз
  
	 
	
     | 
    
        
            
		      
                Если взять строку: var hashBase64Str = Convert.ToBase64String(HashValue); то строка равна содержимому из c:\hash64 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                Т.е. в hash64 лежит base64, а подписываете Вы бинарные данные? конечно подпись не сойдется, вот это преобразование Convert.ToBase64String внутри SignedCms никто делать не будет.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 29.09.2016(UTC) Сообщений: 15  Сказал(а) «Спасибо»: 4 раз
  
	 
	
     | 
    
        
            
		      
                ContentInfo content = new ContentInfo(hashValue); как проинициализировать экземпляр ContentInfo что бы SignedCms понял что массив байт - нужно перевести в base64? (использовать конструктор public ContentInfo(Oid contentType,byte[] content)?) 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                SignedCms будет подписывать именно то, что передано. Никаких преобразований делать не будет. Если именно base64 строку подписать надо, то Код:ContentInfo content = new ContentInfo(System.Text.Encoding.ASCII.GetBytes(Convert.ToBase64String(HashValue)); 
 Ну или нужная кодировка вместо ASCII.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 29.09.2016(UTC) Сообщений: 15  Сказал(а) «Спасибо»: 4 раз
  
	 
	
     | 
    
        
            
		      
                Автор: Kirill Sobolev  SignedCms будет подписывать именно то, что передано. Никаких преобразований делать не будет. Если именно base64 строку подписать надо, то Код:ContentInfo content = new ContentInfo(System.Text.Encoding.ASCII.GetBytes(Convert.ToBase64String(HashValue)); 
 Ну или нужная кодировка вместо ASCII.  Спасибо за ответ, как заработает принимающий сервис попробую данный метод.  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                Также в качестве проверки можно использовать csptest -sfsign -verify.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 29.09.2016(UTC) Сообщений: 15  Сказал(а) «Спасибо»: 4 раз
  
	 
	
     | 
    
        
            
		      
                Добрый день уважаемые коллеги, в силу обстоятельств был долгое время не на месте. Сейчас о проблеме, после всевозможных попыток получения корректного значения сигнатуры подписи, данная подпись не проходит проверку по команде csptest -sfsign -verify -detached , возвращается ошибка: An error occurred in running the program. .\signtsf.c:613:No user cert specified. Cryptocontext will be opened automatical y. Error number 0x0 (0). Операция успешно завершена.
  An error occurred in running the program. .\signtsf.c:743:Detached Signature was NOT verified
  Error number 0x8009310b (2148086027). Встречено неверное значение тега ASN1.
  Total: SYS: 0,016 sec USR: 0,016 sec UTC: 0,047 sec [ErrorCode: 0x8009310b] 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                Здравствуйте.
  >csptest -sfsign -verify -detached 
  Прикрепите файл или сообщите, файл в base64?    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	Форум КриптоПро
	 » 
	Средства криптографической защиты информации
	 » 
	КриптоПро .NET
	 » 
	Аналог выполнения команды "csptest.exe -sfsign -sign..." с помощью SignedCms.ComputeSignature в Net
	 
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close