Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро УЭК 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,451 Сказал «Спасибо»: 553 раз Поблагодарили: 2235 раз в 1743 постах
|
Автор: DawG Благодарю за ответ, но в вашем примере используется сертификат из хранилища сертификатов, а мне бы хотелось использовать неэскортируемый закрытый ключ, хранящийся на УЭК. Зашифровать получается без проблем (использование сертификата с открытым ключом), но вот расшифровать закрытым ключом у меня не выходит. Ошибка и ее код - секретные? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,451 Сказал «Спасибо»: 553 раз Поблагодарили: 2235 раз в 1743 постах
|
Автор: DawG Просто у меня подписать при помощи CAPICOM получилось закрытым ключом, поэтому подумал, что есть способ и зашифровать данные. Не могли бы вы поделиться ссылкой на пример CryptoAPI, где поподробнее было бы описано, как получить ссылку на закрытый ключ, чтобы использовать его для шифрования. Заранее благодарю. В SDK к CSP есть примеры работы с ключами для разных нужд. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
|
Увы, не помню. Но MSDN CryptAcquireContext и т.д. и т.д. Что-то встречалось....
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,451 Сказал «Спасибо»: 553 раз Поблагодарили: 2235 раз в 1743 постах
|
Автор: 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