Compartir a través de


Enumeración de protocolos admitidos

Los protocolos y conjuntos de cifrado admitidos se pueden enumerar mediante llamadas a CryptGetProvParam con PP_ENUMALGS o PP_ENUMALGS_EX. El valor de PP_ENUMALGS_EX funciona como PP_ENUMALGS, pero devuelve una estructura PROV_ENUMALGS_EX que contiene información más amplia sobre los algoritmos admitidos por el proveedor.

Para obtener más información sobre las marcas de protocolo definidas y sus valores, vea Marcas de protocolo.

Dado que el miembro hCryptProv es el identificador de un contexto criptográfico abierto adquirido mediante CryptAcquireContext con su parámetro dwProvType establecido en PROV_RSA_SCHANNEL, en el ejemplo siguiente se enumeran los nombres de todos los algoritmos disponibles en el 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.

En la tabla siguiente se enumeran algunos algoritmos devueltos por un CSP de PROV_RSA_SCHANNEL doméstico típico. Tenga en cuenta que el CSP de este ejemplo no admite las MAC SSL2 SHA ni el cifrado SSL2 DES.

Identificador de algoritmo Longitud mínima de clave Longitud máxima de clave Protocolos Nombre del algoritmo
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"

 

Para prepararse para enviar mensajes ClientHello o ServerHello, el motor de protocolo Schannel enumera los algoritmos y los tamaños de clave admitidos por el CSP y crea una lista internamente de conjuntos de cifrado admitidos.