Форум КриптоПро
	 » 
	Средства криптографической защиты информации
	 » 
	КриптоПро .NET
	 » 
	Есть ли способ узнать установлена ли на компьютере КриптоПро из под .net ?
	 
	
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 15.06.2009(UTC) Сообщений: 89 Откуда: Уфа, РРЦ "АйТи"
  
	 
	
     | 
    
        
            
		      
                Есть код на c# внутри которого очень интересно узнать стоит ли на машине КриптоПро. Подскажите пожалуйста как 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
  
	 
	
     | 
    
        
            
		      
                КриптоПро CSP или КриптоПро Sharpei? Какой-то определенной версии? Как Вы потом с ним будете работать, через P/Invoke? Цитата:CryptAcquireContext( ref hProv, 0, 0, 75, CRYPT_VERIFYCONTEXT )  Так можно узнать, что на компьютере установлен Крипто-провайдер поддерживающий ГОСТ Р 34.10-2001.    | 
С уважением, Александр.  | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 15.06.2009(UTC) Сообщений: 89 Откуда: Уфа, РРЦ "АйТи"
  
	 
	
     | 
    
        
            
		      
                Челпанов А. написал:КриптоПро CSP или КриптоПро Sharpei? Какой-то определенной версии? Как Вы потом с ним будете работать, через P/Invoke? Цитата:CryptAcquireContext( ref hProv, 0, 0, 75, CRYPT_VERIFYCONTEXT )  Так можно узнать, что на компьютере установлен Крипто-провайдер поддерживающий ГОСТ Р 34.10-2001.  Именно КриптоПро CSP, версии >= const.  Нужно просто булево значение установлена\не установлена  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
  
	 
	
     | 
    
        
            
		      
                Для версий CSP старше 2.0, номер версии можно узнать через  Цитата:DWORD &ver; DWORD dwLen = sizeof( ver ); CryptGetProvParam( hProv, PP_VERSION, (BYTE*)&ver, &dwLen, 0 );  Без установленного CSP  Цитата:CryptAcquireContext( ref hProv, 0, 0, 75, CRYPT_VERIFYCONTEXT )  вернет FALSE    | 
С уважением, Александр.  | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 15.06.2009(UTC) Сообщений: 89 Откуда: Уфа, РРЦ "АйТи"
  
	 
	
     | 
    
        
            
		      
                Челпанов А. написал:Для версий CSP старше 2.0, номер версии можно узнать через  Цитата:DWORD &ver; DWORD dwLen = sizeof( ver ); CryptGetProvParam( hProv, PP_VERSION, (BYTE*)&ver, &dwLen, 0 );  Без установленного CSP  Цитата:CryptAcquireContext( ref hProv, 0, 0, 75, CRYPT_VERIFYCONTEXT )  вернет FALSE  Возможно глупый вопрос - но есть ли пример вызова этого функционала из .net ?   
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
  
	 
	
     | 
    
        
            
		      
                Точного кода нет. Но написанного выше должно хватить.    | 
С уважением, Александр.  | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 05.05.2009(UTC) Сообщений: 42   
	 
	
     | 
    
        
            
		      
                Постарался реализовать предложеннное на C# Вот рез-т Цитата: 		// #define CRYPT_VERIFYCONTEXT     0xF0000000 		public const Int32 CRYPT_VERIFYCONTEXT = -268435456; //No private key access required
  		[DllImport("advapi32.dll", SetLastError = true)] 		public static extern bool CryptGetProvParam( 		   IntPtr hProv, 		   uint dwParam, 		   out byte[] pbData, 		   ref uint dwDataLen, 		   uint dwFlags);
  		[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] 		public static extern bool CryptAcquireContext( 			ref IntPtr hProv, 			String pszContainer, 			String pszProvider, 			Int32 dwProvType, 			Int32 dwFlags 		);
  		private void btn_Click(object sender, EventArgs e) 		{ 			 			IntPtr dProvider = new IntPtr(); 			if (CryptAcquireContext(ref dProvider, null, null, 75, CRYPT_VERIFYCONTEXT)) 			{ 				MessageBox.Show("Контекст провайдера получен"); 				StringBuilder sb = new StringBuilder(); 				byte[] ss; 				uint ll = 0; 				bool r = CryptGetProvParam(dProvider, 5, out ss, ref ll, 0);                                ... 			} 			else 			{ 				MessageBox.Show("не установлен"); 			} 		}
 
  Определяет наличие правильно, а вот получить версию ну никак. Функция CryptGetProvParam возвращает false. GetLastError() выдает ошибку 234. Не поможете понять, в чем причина? (Установлен КриптоПро CSP 3.6)     Отредактировано пользователем 19 ноября 2009 г. 18:52:49(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
  
	 
	
     | 
    
        
            
		      
                Код:
...
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool CryptGetProvParam(
IntPtr hProv,
uint dwParam,
[In, Out] byte[] pbData, ref uint dwDataLen, 
uint dwFlags);
...
byte[] ss = new byte[4];
uint ll = 4;
bool r = CryptGetProvParam(dProvider, 5, ss, ref ll, 0);
...
 
    | 
С уважением, Александр.  | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 05.05.2009(UTC) Сообщений: 42   
	 
	
     | 
    
        
            
		      
                Спасибо заработало, но она  вернула версию 3.6 (в массиве 6,3,0,0). А можно ли получить полнее например 3.6.5329  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
  
	 
	
     | 
    
        
            
		      
                Из результата 6 (младший байт DWORD) подверсия, 3 (3 старших байта версия). Выдержка из WinCryptEx.h для csp версий 3.6 и выше. Код:#define PP_VERSION_EX 138
typedef struct _PROV_PP_VERSION_EX {
    DWORD PKZI_Build;	/*!< Версия ПКЗИ. */
    DWORD SKZI_Build;	/*!< Версия СКЗИ. */
    DWORD TypeDebRel;	/*!< Тип сборки: VER_TYPE_DEBUG, VER_TYPE_RELEASE. */
    DWORD Architecture;	/*!< Аппаратная архитектура: VER_ARCH_IA32, 
			 * VER_ARCH_IA64, VER_ARCH_SPARC32, VER_ARCH_SPARC64,
			 * VER_ARCH_AMD64, VER_ARCH_ARM, VER_ARCH_PPC32,
			 * VER_ARCH_PPC64.
			 */
    DWORD OS;		/*!< Тип ОС: VER_OS_WINDOWS, VER_OS_SOLARIS,
			 * VER_OS_FREEBSD, VER_OS_LINUX, VER_OS_AIX.
			 */
} PROV_PP_VERSION_EX;
 
 PKZI_Build - build версии продукта SKZI_Build - build версии ядра СКЗИ начало изменений 20.05 {Выдержка из WinCryptEx.h для csp 3.0 Код:typedef struct PROV_PP_VERSION_EX_ {
    DWORD Version;
    DWORD Build;
    DWORD TypeDebRel;
    DWORD Architecture;
    DWORD OS;
} PROV_PP_VERSION_EX; 
 Version - версия Csp (0x30000) Build - номер сборки СКЗИ Для определения номера сборки ПКЗИ используйте код  Код:#define CPCSP_GUID _TEXT("247F4CC0-723C-40A5-9A38-E2E2C24DEB46")
TCHAR lpValueBuf[11];
DWORD pcchValueBuf = 11;
retvalue  = MsiGetProductInfo(_TEXT("{") CPCSP_GUID _TEXT("}"),INSTALLPROPERTY_VERSIONSTRING,lpValueBuf, &pcchValueBuf); 
 } конец изменений 20.05Для csp 2.0 (только 2.0)  Код:
#define CRYPT_VERSION_BUILD  0x20
DWORD subver;
if( !CryptGetProvParam( hProv_, PP_VERSION, (BYTE*)&subver, &dwLen, CRYPT_VERSION_BUILD ) )
build_ = ((subver >> 28) & 0xf) * 10000
    + ((subver >> 24) & 0xf) * 1000
    + ((subver >> 20) & 0xf) * 100
    + ((subver >> 16) & 0xf) * 10
    + ((subver >> 12) & 0xf) * 1;
 priv_ = ((subver >> 8) & 0xf) * 100
    + ((subver >> 4) & 0xf) * 10
    + (subver & 0xf) * 1;
 
 Отредактировано пользователем 20 мая 2010 г. 17:57:50(UTC)
 | Причина: Не указана    | 
С уважением, Александр.  | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	Форум КриптоПро
	 » 
	Средства криптографической защиты информации
	 » 
	КриптоПро .NET
	 » 
	Есть ли способ узнать установлена ли на компьютере КриптоПро из под .net ?
	 
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close