Шифровка от Microsoft Тихоноff Александр Хакер, номер #072, стр. 072-108-2 CryptAcquireContext(hCryptProvider,pszContainer,pszProvider, dwProvType, dwFlags) hCryptProvider - дескриптор провайдера, out-параметр. Если ему присвоить значение nil, то по умолчанию будет использоваться CSP (тип - HCRYPTPROV). Где их искать, я говорил выше. pszContainer - имя контейнера ключей. pszProvider - имя провайдера. dwProvType - тип провайдера. dwFlags – флаги. Кстати, значения типа провайдера и имени провайдера берутся именно из этой функции. С ее помощью можно поработать и с контейнерами ключей. Параметру dwFlags необходимо присвоить значение CRYPT_NEWKEYSET для создания нового ключника, CRYPT_DELETEKEYSET - для удаления оного и CRYPT_VERIFYCONTEXT, если надо только проверить существование контейнера. Кстати, ключники бывают двух типов: пользовательские и машинные. Пользовательский содержит ключи определенного пользователя, и доступ к нему можно получить только от его имени. А вот машинные контейнеры - секретные. В них содержатся ключи, принадлежащие программам и процессам. Вообще, CryptoAPI - элемент оси, позволяющий выполнять криптоработу, необходимую для функционирования самой операционки. Майкрософт - все-таки не очень жадная фирма. Она предоставила девелоперам возможность использовать криптофункции в своих приложениях. Но если мы инициализировали CSP, то, бесспорно, надо будет его потом и отключить. Это легко реализуется при помощи функции CryptReleaseContext(). Ее необходимо вызывать с заголовком криптопроцесса и флагами (в общем, все как обычно). Золотой ключик В CryptoAPI можно сгенерировать ключи для любого используемого алгоритма. Если нужен случайный ключ - используем функцию CryptGenKey(). Если ты эстет и ключ должен быть с некоторыми правилами - пожалуйста: функция CryptDeriveKey() придет тебе на помощь! Она удобна в том случае, когда есть желание передать лишь ключевую фразу, а получатель этой функцией сгенерирует конечный ключ. CryptGenKey(hProv, Algid, dwFlags, phKey) hProv - дескриптор криптографического процесса. AlgId - уникальный идентификатор алгоритма. Если мы создаем ключ для шифрования - присваиваем значение AT_KEYEXCHANGE, а если создаем для подписи - AT_SIGNATURE. dwFlags – флаги, свои для каждого алгоритма, который может быть нулем, а может содержать несколько флагов (для объединения используются операторы OR и AND). Возможные значения: CRYPT_ARCHIVABLE - ключ может быть экспортирован, пока его не уничтожат функцией CryptDestroyKey(). Обычно используется для обеспечения возможности восстановления ключей, а также для архивации базы. CRYPT_CREATE_SALT - при этом флаге ключу будет автоматически присвоено случайное значение. CRYPT_EXPORTABLE - ключ может быть экспортирован из CSP при помощи функции CryptExportKey. Чаще всего этот флаг включают. Если его не включать, то ключ будет сеансовым, т.е. использовал один раз и выкинул. Причем использовал только ты (или твое приложение), а не кто-то другой. CRYPT_USER_PROTECTED - при установленном флаге пользователь будет уведомлен, если его ключ начнет юзать кто-то другой. |