Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Nachdem ein Master schlüssel erstellt oder importiert wurde, informieren sowohl RSA/Schannel als auch Diffie-Hellman/Schannel den CSP- über den Typ Massenverschlüsselungsschlüssel und MAC-Schlüssel, die vom Hauptschlüssel abgeleitet werden. Im folgenden Beispiel werden diese Algorithmen angegeben. Derselbe Code wird sowohl für Den Client als auch für den 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);
};
Anmerkung
Ein Schannel Protokollmodul darf keine Algorithmen und Schlüsselgrößen angeben, die vom CSP nicht unterstützt werden. Weitere Informationen finden Sie unter Aufzählen unterstützter Protokolle. Wenn nicht unterstützte Algorithmen oder Schlüsselgrößen angegeben werden, muss die CSP-Funktion fehlschlagen und den NTE_BAD_DATA Fehlercode zurückgeben.