Крипто-Про CSP |
//-------------------------------------------------------------------- // Пример создания сессионного ключа, основанного на хеше, рассчитанного // из пароля пользователя. Пароль вводится в процессе работы программы. //-------------------------------------------------------------------- #define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) void HandleError(char *s); int main() { //-------------------------------------------------------------------- // Объявление и инициализация переменных. HCRYPTPROV hCryptProv; HCRYPTKEY hKey; HCRYPTHASH hHash; CHAR szPassword[512]; DWORD dwLength; //-------------------------------------------------------------------- // Получение пароля от пользователя. fprintf(stderr,"Enter a password to be used to create a key:"); scanf("%s",szPassword); fprintf(stderr,"The password is %s .\n", szPassword); dwLength = (DWORD)strlen(szPassword); //-------------------------------------------------------------------- // Получение дескриптора контекста криптографического провайдера. if(CryptAcquireContext( &hCryptProv, NULL, NULL, 75, 0)) { printf("A context has been acquired. \n"); } else { HandleError("Error during CryptAcquireContext!"); } //-------------------------------------------------------------------- // Создание пустого объекта хеширования. if(CryptCreateHash( hCryptProv, CALG_GR3411, 0, 0, &hHash)) { printf("An empty hash object has been created. \n"); } else { HandleError("Error during CryptCreateHash!"); } //-------------------------------------------------------------------- // Хеширование строки пароля. if(CryptHashData( hHash, (BYTE *)szPassword, dwLength, 0)) { printf("The password has been hashed. \n"); } else { HandleError("Error during CryptHashData!"); } //-------------------------------------------------------------------- // Создание сессионного ключа, основанного на хеше, полученного из пароля. if(CryptDeriveKey( hCryptProv, CALG_G28147, hHash, CRYPT_EXPORTABLE, &hKey)) { printf("The key has been derived. \n"); } else { HandleError("Error during CryptDeriveKey!"); } //-------------------------------------------------------------------- // Использование hKey для зашифрования и расшифрования // сообщений. //-------------------------------------------------------------------- // Очистка. // Уничтожение объекта функции хеширования. if(hHash) CryptDestroyHash(hHash); // Уничтожение сессионного ключа. if(hKey) CryptDestroyKey(hKey); // Освобождение дескриптора провайдера. if(hCryptProv) CryptReleaseContext(hCryptProv, 0); printf("The program to derive a key completed without error. \n"); return 0; } // Конец main
Windows 2000/XP/2003: Необходимо Windows 2000 SP4 или
старше с Internet Explorer 6.0 или старше.
Windows NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP
2.0 ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Ядро Windows NT: не поддерживает.
Что Вы
думаете по поводу данной статьи? |
Закажите CD c Крипто-Про CSP |