?? sessionkey.cpp
字號:
#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>
#define KEY_PAIR_SIZE dwSize - 12
#define SESSION_KEY_SIZE dwKeyMaterial
void main()
{
HCRYPTPROV hProv = 0;
HCRYPTKEY hExchangeKeyPair = 0;
HCRYPTKEY hSessionKey = 0;
BYTE *pbKeyMaterial = NULL;
DWORD dwKeyMaterial ;
BYTE *pbExportedKeyBlob = NULL;
BYTE *pbEncryptedKey = NULL;
DWORD dwSize;
unsigned int c;
__try
{
if (!CryptAcquireContext( &hProv,
"Container Name",
MS_ENHANCED_PROV ,
PROV_RSA_FULL,
CRYPT_MACHINE_KEYSET ))
{
__leave;
}
//---------------------------------------------------
//創建一個會話密鑰。 在這個例子中我們將使用一個168位的3DES key。
if (!CryptGenKey( hProv, CALG_3DES,
CRYPT_EXPORTABLE, &hSessionKey ))
{
__leave;
}
//---------------------------------------------------
//得到交換密鑰對的句柄
if (!CryptGetUserKey( hProv, AT_KEYEXCHANGE, &hExchangeKeyPair))
{
__leave;
}
//--------------------------------------------------------
//用密鑰對中公鑰部分對會話密鑰進行加密
//第一次先獲得已加密的會話密鑰的必要字節大小
//然后將其輸出。
if (!CryptExportKey( hSessionKey,
hExchangeKeyPair,
SIMPLEBLOB,
0,
NULL,
&dwSize))
{
__leave;
}
pbExportedKeyBlob = new BYTE[dwSize];
if (!CryptExportKey( hSessionKey,
hExchangeKeyPair,
SIMPLEBLOB,
0,
pbExportedKeyBlob,
&dwSize))
{
__leave;
}
//--------------------------------------------------------
//我們刪除第一個12字節大小的Blob 信息
pbEncryptedKey = new BYTE [KEY_PAIR_SIZE];
for ( c = 0 ; c < KEY_PAIR_SIZE ; c++ )
{
pbEncryptedKey[c] = pbExportedKeyBlob[c+12];
}
//--------------------------------------------------------
//此時我們用密鑰對中的私鑰部分就可以得到會話密鑰的值。
if (!CryptDecrypt( hExchangeKeyPair, 0,
TRUE, 0,
pbEncryptedKey, &dwKeyMaterial))
{
__leave;
}
//-------------------------------------------------------
// pbKeyMaterial中存放著密鑰的值
pbKeyMaterial = new BYTE[ SESSION_KEY_SIZE ];
for ( c = 0; c < SESSION_KEY_SIZE ; c++ )
{
pbKeyMaterial[c] = pbEncryptedKey[c];
}
}
__finally
{
if (pbKeyMaterial ) LocalFree(pbKeyMaterial );
if (hSessionKey) CryptDestroyKey(hSessionKey);
if (hExchangeKeyPair) CryptDestroyKey(hExchangeKeyPair);
if (hProv)
{
CryptReleaseContext(hProv, 0);
}
}
} // 結束
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -