Angeben der Algorithmen
Nachdem ein Hauptschlüssel erstellt oder importiert wurde, informieren sowohl RSA/SChannel als auch Diffie-Hellman/SChannel den CSP über den Typ der Massen Verschlüsselungsschlüssel und Mac-Schlüssel , die vom Hauptschlüssel abgeleitet werden. Im folgenden Beispiel werden diese Algorithmen angegeben. Der gleiche Code wird sowohl für Client als auch für Server verwendet.
#include <windows.h>
#include <stdio.h>
typedef struct _SCHANNEL_ALG
{
DWORD dwUse;
ALG_ID Algid;
DWORD cBits;
DWORD dwFlags;
DWORD dwReserved;
} SCHANNEL_ALG, *PSCHANNEL_ALG;
SCHANNEL_ALG Algorithm;
//--------------------------------------------------------------------
// Algorithms for the SCHANNEL_ALG structure
#define SCHANNEL_MAC_KEY 0x00000000
#define SCHANNEL_ENC_KEY 0x00000001
//--------------------------------------------------------------------
// dwFlags for the SCHANNEL_ALG structure
// This flag will be set when the SSL cipher suite is exportable
// outside the United States and Canada. The use of this flag notifies
// the CSP that it must perform the extra export steps when deriving
// the key.
#define INTERNATIONAL USAGE 0x00000001
void main()
{
//--------------------------------------------------------------------
// Specify the bulk encryption algorithm.
Algorithm.dwUse = SCHANNEL_ENC_KEY;
Algorithm.Algid = CALG_RC4; // or CALG_RC2, CALG_DES, and so on
Algorithm.cBits = 40; // or 64, 128, 192, and so on
if (!CryptSetKeyParam(
hMasterKey,
KP_SCHANNEL_ALG,
(PBYTE)&Algorithm,
0))
{
printf("Failed called to CryptSetKeyParam\n");
exit(1);
};
//--------------------------------------------------------------------
// Specify hash algorithm.
Algorithm.dwUse = SCHANNEL_MAC_KEY;
Algorithm.Algid = CALG_MD5; // or CALG_SHA, and so on
Algorithm.cBits = 128; // or 160...
if (!CryptSetKeyParam(
hMasterKey,
KP_SCHANNEL_ALG,
(PBYTE)&Algorithm,
0))
{
printf("Failed called to CryptSetKeyParam\n");
exit(1);
};
Hinweis
Eine SChannel -Protokoll-Engine darf keine Algorithmen und Schlüsselgrößen angeben, die vom CSP nicht unterstützt werden. Weitere Informationen finden Sie unter Auflisten unterstützter Protokolle. Wenn nicht unterstützte Algorithmen oder Schlüsselgrößen angegeben werden, muss bei der CSP-Funktion ein Fehler auftreten und der Fehlercode für die erbende _ Fehlermeldung zurückgegeben werden _