Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In het volgende voorbeeld worden hashes gemaakt en een sessiesleutel die kunnen worden gebruikt om een bericht, tekst of bestand te versleutelen.
In dit voorbeeld ziet u ook het gebruik van de volgende CryptoAPI-functies:
- CryptAcquireContext om een cryptografische serviceproviderte verkrijgen.
- CryptCreateHash- om een leeg hash-object te maken.
- CryptGenKey om een willekeurige sessiesleutel te maken.
- CryptHashSessionKey om de gemaakte sessiesleutel te hashen.
- CryptDestroyHash om de hash te vernietigen.
- CryptDestroyKey om de gemaakte sleutel te vernietigen.
- CryptReleaseContext om de CSP vrij te geven.
In dit voorbeeld wordt de functie MyHandleErrorgebruikt. De code voor deze functie is opgenomen in het voorbeeld. Code voor deze en andere hulpfuncties wordt ook vermeld onder Functies voor algemeen gebruik.
// Copyright (C) Microsoft. All rights reserved.
//
// CreateAndHashSessionKey.cpp : Defines the entry point for the
// application.
//
#include <stdafx.h>
#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
// Link with the Crypt32.lib file.
#pragma comment (lib, "Crypt32")
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
void MyHandleError(LPTSTR psz);
void main()
{
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
HCRYPTKEY hKey;
//---------------------------------------------------------------
// Acquire a cryptographic provider context handle.
if(CryptAcquireContext(
&hCryptProv,
NULL,
NULL,
PROV_RSA_FULL,
0))
{
printf("CryptAcquireContext complete. \n");
}
else
{
MyHandleError("Acquisition of context failed.");
}
//---------------------------------------------------------------
// Create a hash object.
if(CryptCreateHash(
hCryptProv,
CALG_MD5,
0,
0,
&hHash))
{
printf("An empty hash object has been created. \n");
}
else
{
MyHandleError("Error during CryptBeginHash!\n");
}
//---------------------------------------------------------------
// Create a random session key.
if(CryptGenKey(
hCryptProv,
CALG_RC2,
CRYPT_EXPORTABLE,
&hKey))
{
printf("A random session key has been created. \n");
}
else
{
MyHandleError("Error during CryptGenKey!\n");
}
//---------------------------------------------------------------
// Compute the cryptographic hash on the key object.
if(CryptHashSessionKey(
hHash,
hKey,
0))
{
printf("The session key has been hashed. \n");
}
else
{
MyHandleError("Error during CryptHashSessionKey!\n");
}
/*
Use the hash of the key object. For instance, additional data
could be hashed and sent in a message to several recipients. The
recipients will be able to verify who the message originator is
if the key used is also exported to them.
*/
//---------------------------------------------------------------
// Clean up.
// Destroy the hash object.
if(hHash)
{
if(!(CryptDestroyHash(hHash)))
{
MyHandleError("Error during CryptDestroyHash");
}
}
// Destroy the session key.
if(hKey)
{
if(!(CryptDestroyKey(hKey)))
{
MyHandleError("Error during CryptDestroyKey");
}
}
// Release the provider.
if(hCryptProv)
{
if(!(CryptReleaseContext(hCryptProv,0)))
{
MyHandleError("Error during CryptReleaseContext");
}
}
} // End main.
// Define function MyHandleError.
void MyHandleError(LPTSTR psz)
{
_ftprintf(stderr, TEXT("An error occurred in the program. \n"));
_ftprintf(stderr, TEXT("%s\n"), psz);
_ftprintf(stderr, TEXT("Error number %x.\n"), GetLastError());
_ftprintf(stderr, TEXT("Program terminating. \n"));
exit(1);
} // End of MyHandleError.