Udostępnij przez


Wyliczanie obsługiwanych protokołów

Obsługiwane protokoły i zestawy szyfrowania można wyświetlać za pomocą wywołań CryptGetProvParam za pomocą PP_ENUMALGS lub PP_ENUMALGS_EX. Wartość PP_ENUMALGS_EX działa jak PP_ENUMALGS, ale zwraca strukturę PROV_ENUMALGS_EX, która zawiera bardziej obszerne informacje na temat algorytmów obsługiwanych przez dostawcę.

Aby uzyskać więcej informacji na temat zdefiniowanych flag protokołu i ich wartości, zobacz Flagi protokołu.

Biorąc pod uwagę, że element członkowski hCryptProv jest dojściem otwartego kontekstu kryptograficznego uzyskanego przy użyciuCryptAcquireContext z dwProvType ustawionym na PROV_RSA_SCHANNEL, w poniższym przykładzie wymieniono nazwy wszystkich algorytmów dostępnych w programie CSP.

PROV_ENUMALGS_EX EnumAlgs;     //   Structure to hold information on 
                               //   a supported algorithm
DWORD dFlag = CRYPT_FIRST;     //   Flag indicating that the first
                               //   supported algorithm is to be
                               //   enumerated. Changed to 0 after the
                               //   first call to the function.
cbData = sizeof(PROV_ENUMALGS_EX);

while( CryptGetProvParam(
    hCryptProv,          // handle to an open cryptographic provider
    PP_ENUMALGS_EX, 
    (BYTE *)&EnumAlgs,  // information on the next algorithm
    &cbData,            // number of bytes in the PROV_ENUMALGS_EX
    dFlag))             // flag to indicate whether this is a first or
                        // subsequent algorithm supported by the
                        // CSP.
{
    printf("Supported Algorithm name %s\n", EnumAlgs.szName);
    dFlag = CRYPT_NEXT;          // Set to CRYPT_NEXT after the first call,
} //  end of while loop. When all of the supported algorithms have
  //  been enumerated, the function returns FALSE.

W poniższej tabeli wymieniono niektóre algorytmy zwracane przez typowy rodzimy CSP PROV_RSA_SCHANNEL. Zwróć uwagę, że w tym przykładzie dostawca usług kryptograficznych nie obsługuje MAC-ów SHA SSL2 ani szyfrowania DES SSL2.

Identyfikator algorytmu Minimalna długość klucza Maksymalna długość klucza Protokoły Nazwa algorytmu
CALG_RSA_KEYX 512 2048 0x0007 "RSA_KEYX"
CALG_MD5 128 128 0x0007 "MD5"
CALG_SHA 160 160 0x0005 SHA
CALG_RC4 40 128 0x0007 "RC4"
CALG_DES 56 56 0x0005 "DES"

 

Aby przygotować się do wysyłania komunikatów ClientHello lub ServerHello, aparat protokołu Schannel wylicza algorytmy i rozmiary kluczy obsługiwane przez dostawcę usług kryptograficznych oraz wewnętrznie tworzy listę obsługiwanych pakietów szyfrujących.