列舉支援的通訊協定
透過呼叫 CryptGetProvParam 與 PP_ENUMALGS 或 PP_ENUMALGS_EX,即可列出支援的通訊協定和加密套件。 PP_ENUMALGS_EX值的運作方式類似PP_ENUMALGS,但會傳回 PROV_ENUMALGS_EX 結構,其中包含提供者所支援演算法的詳細資訊。
如需已定義通訊協定旗標及其值的詳細資訊,請參閱 通訊協定旗標。
假設hCryptProv成員是使用CryptAcquireCoNtext將其dwProvType參數設定為 PROV_RSA_SCHANNEL 而取得的開放式密碼編譯內容控制碼,下列範例會列出 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.
下表列出一般國內PROV_RSA_SCHANNEL CSP 所傳回的一些演算法。 請注意,此範例中的 CSP 不支援 SSL2 SHA MAC 和 SSL2 DES 加密。
演算法識別碼 | 金鑰長度下限 | 金鑰長度上限 | 通訊協定 | 演算法名稱 |
---|---|---|---|---|
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」 |
為了準備傳送 ClientHello 或 ServerHello 訊息, Schannel 通訊協定引擎會列舉 CSP 支援的演算法和金鑰大小,並在內部建置支援的加密套件清單。