Здравствуйте, Аноним, Вы писали:
А>Такая проблема:
А>Есть приватный ключ в види MS BLOB (т.е. набор байт). Нужно его импортировать в хранилище. Делаю с помощью CryptImportKey так
А>А>hTokenSessionKey = 0;
А>CryptImportKey(hTokenProv, &wrappedKey[0], wrappedKey.size(), hTokenSessionKey,0, &hKey);
А>
А>Все работает. Только hTokenSessionKey -- пустой. А это годится только для ПУБЛИЧНЫХ ключей. Т.е. это небезопасно (ну и неправильно, самое главное).
А>Очень долго искал правильный пример импорта приватных ключей (в виде BLOB, а не из контейнера), но так и не нашел. Может кто подскажет как првильно? Очень желательно пример.
В msdn написано:
The CryptImportKey function transfers a cryptographic key from a key BLOB into a cryptographic service provider (CSP). This function can be used to import an Schannel session key, regular session key, public key, or public/private key pair. For all but the public key, the key or key pair is encrypted.
Можно поступить так:
Сгенерировать сессионный ключ в том же криптопровайдере (к примеру, CryptDeriveKey из хэша от пароля или CryptGenKey);
Зашифровать ваш блоб с ключом на сгенерированном ключе (CryptEncrypt);
Импортировать в хранилище с помощью CryptImportKey, которой в качестве hTokenSessionKey передать дескриптор сгенерированного сессионного ключа.