Форум КриптоПро
	 » 
	Устаревшие продукты
	 » 
	КриптоПро УЭК CSP
	 » 
	Шифрование с помощью Private Key сертификата
	 
	
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 12.02.2015(UTC) Сообщений: 8  Откуда: Тюмень Сказал(а) «Спасибо»: 10 раз
  
	 
	
     | 
    
        
            
		      
                Хотелось бы узнать: возможно ли использовать закрытый ключ сертификата, чтобы шифровать/расшифровывать данные? Алгоритм не важен: асимметричный (открытым зашифровывать, закрытым расшифровывать) или симметричный (закрытым и шифровать, и расшифровывать). Подписать данные закрытым ключом с помощью объекта  CAPICOM.SignedData получилось, создав ссылку на контейнер с закрытым ключом: Код:privateKey.Open(pk.ContainerName, pk.ProviderName, PROV_GOST_2001_DH, CAPICOM.CAPICOM_KEY_SPEC.CAPICOM_KEY_SPEC_SIGNATURE, CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, false); 
 Шифровать пробывал с помощью объекта  CAPICOM.EnvelopedData, но получал ошибку при расшифровывании закрытым ключом о том, что ключ не существует. Где мог допустить ошибку? Или если есть другой способ использования закрытого ключа для шифрования - буду весьма признателен за информацию. Заранее благодарю.  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
  
	 
	
     | 
    
        
            
		      
                А причем здесь ключ? CAPICOM прекрасно прячет работу с ключами. ЗАШИФРОВАТЬ: Код:Public Function EnCryptB(b() As Byte, certName As String) As Byte()
'------------------------------------------------------------------------------
' Функиция EnCryptB зашифровывает b()
' certName = "aaa|bbb|....." могет быть несколько
' и возвращает зашифрованные данные
'------------------------------------------------------------------------------
Dim v             As Variant
Dim j             As Long
Dim rc    As Long
Dim xb()  As Byte
Dim EnvelopedData As capicom.EnvelopedData
Dim Recipient     As capicom.Certificate
' Создание объекта EnvelopedData.
Set EnvelopedData = New capicom.EnvelopedData
' Добавление получателей.
v = Split(certName, dlm)
For j = LBound(v) To UBound(v)
   Set Recipient = Me.GetCert("AddressBook", CStr(v(j))) 'нету - поисчем в MY
   If Recipient Is Nothing Then Set Recipient = Me.GetCert("My", CStr(v(j)))
   If Not (Recipient Is Nothing) Then EnvelopedData.Recipients.Add Recipient
Next j
If EnvelopedData.Recipients.Count = 0 Then
  mHasErr = -4
  mStrErr = "EnCryptB.getCert:  Not found Recipients = " & certName
  EnCryptB = xb
  Exit Function
End If
  
EnvelopedData.Content = b
EnCryptB = EnvelopedData.Encrypt(mOutType)
Set EnvelopedData = Nothing
Set Recipient = Nothing
Exit Function
Errs:
  mHasErr = Err.Number
  mStrErr = "EnCryptB: " & Err.Number & " - " & Err.Description
  EnCryptB = xb
End Function
 
 РАСШИФРОВАТЬ: Код:Public Function DeСryptB(b() As Byte) As Byte()
' расшифровать, если Ок то вернуть Content иначе 0
'******************************************************************************
Dim EnvelopedData As capicom.EnvelopedData
Set EnvelopedData = New capicom.EnvelopedData
On Error GoTo Errs
EnvelopedData.Decrypt b
DeСryptB = EnvelopedData.Content
Set EnvelopedData = Nothing
Exit Function
Errs:
  mHasErr = Err.Number
  mStrErr = Err.Source & ": " & Err.Description
  DeСryptB = b
End Function
 
 Для расшифровки используется сертификат из хранилища "MY"="Лишние" т.е. хоть один сертификат из списка получателей должен быть установлен.... Точно так же подписать, проверить, снять подпись - не требует раьоты с ключами напрямую достаточно получить контекст сертификата из хранилища.  
            
	  
         
     | 
    
        
              1 пользователь поблагодарил Boris@Serezhkin.com за этот пост.  
     | 
    
        
            DawG оставлено 08.06.2015(UTC)
          
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
  
	 
	
     | 
    
        
            
		      
                А если хочется поиграться с ключами, то    cls_CryptoAPI.rar  (3kb) загружен 19 раз(а). 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 12.02.2015(UTC) Сообщений: 8  Откуда: Тюмень Сказал(а) «Спасибо»: 10 раз
  
	 
	
     | 
    
        
            
		      
                Благодарю за ответ, но в вашем примере используется сертификат из хранилища сертификатов, а мне бы хотелось использовать неэскортируемый закрытый ключ, хранящийся на УЭК. Зашифровать получается без проблем (использование сертификата с открытым ключом), но вот расшифровать закрытым ключом у меня не выходит. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
  
	 
	
     | 
    
        
            
		      
                Не вижу промблеммы через оснастку КриптоПро установить сертификат в хранилище "Лишние" Через certmgr.msc убедиться что сказано "Есть" закрытый ключ. ну и расшифровывать.... КриптоПро само попросит вставить чтой-то куда-то... Ну если очень хочется использовать не экспортируемый контейнер, без установки сертификата, то это CriptoApi, а не CAPICOM Отредактировано пользователем 8 июня 2015 г. 7:47:53(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 12.02.2015(UTC) Сообщений: 8  Откуда: Тюмень Сказал(а) «Спасибо»: 10 раз
  
	 
	
     | 
    
        
            
		      
                Просто у меня подписать при помощи CAPICOM получилось закрытым ключом, поэтому подумал, что есть способ и зашифровать данные. Не могли бы вы поделиться ссылкой на пример CryptoAPI, где поподробнее было бы описано, как получить ссылку на закрытый ключ, чтобы использовать его для шифрования. Заранее благодарю. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                Автор: DawG  Благодарю за ответ, но в вашем примере используется сертификат из хранилища сертификатов, а мне бы хотелось использовать неэскортируемый закрытый ключ, хранящийся на УЭК. Зашифровать получается без проблем (использование сертификата с открытым ключом), но вот расшифровать закрытым ключом у меня не выходит.  Ошибка и ее код - секретные?    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                Автор: DawG  Просто у меня подписать при помощи CAPICOM получилось закрытым ключом, поэтому подумал, что есть способ и зашифровать данные. Не могли бы вы поделиться ссылкой на пример CryptoAPI, где поподробнее было бы описано, как получить ссылку на закрытый ключ, чтобы использовать его для шифрования. Заранее благодарю.  В SDK к CSP есть примеры работы с ключами для разных нужд.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
  
	 
	
     | 
    
        
            
		      
                Увы, не помню. Но MSDN CryptAcquireContext и т.д. и т.д. Что-то встречалось.... 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                Автор: DawG  Благодарю за ответ, но в вашем примере используется сертификат из хранилища сертификатов, а мне бы хотелось использовать неэскортируемый закрытый ключ, хранящийся на УЭК. Зашифровать получается без проблем (использование сертификата с открытым ключом), но вот расшифровать закрытым ключом у меня не выходит.  Получаете:  Код ошибки: 2148073485 - Ключ не существует, так? Потому что в контейнере есть только ключ подписи (нет ключа обмена).    | 
 | 
            
	 
        
    
    
        
              1 пользователь поблагодарил Андрей * за этот пост.  
     | 
    
        
            DawG оставлено 08.06.2015(UTC)
          
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	Форум КриптоПро
	 » 
	Устаревшие продукты
	 » 
	КриптоПро УЭК CSP
	 » 
	Шифрование с помощью Private Key сертификата
	 
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close