Вы можете использовать CryptImportKey
, чтобы получить ключ в Windows Cryptographic Service Provider. Затем следуйте примеру MSDN, код HMAC . Хитрость для получения вашего ключа в CSP состоит в том, чтобы создать структуру для хранения 3 вещей: BLOBHEADER
, DWORD
для длины и char [] для ключа. Я предполагаю, что у вас есть необработанные ключевые данные, чтобы они выглядели примерно так:
struct KeyData
{
BLOBHEADER hdr;
unsigned long keyLength;
unsigned char key[128];
};
void ComputeHash()
{
HCRYPTPROV cryptoProvider = 0;
HCRYPTKEY cryptKey = 0;
KeyData kd;
kd.hdr.aiKeyAlg = CALG_RC2;
kd.hdr.bType = PLAINTEXTKEYBLOB;
kd.hdr.bVersion = CUR_BLOB_VERSION;
kd.hdr.reserved = 0;
kd.keyLength = 128;
/* set your key data here */
/* get a crypto provider - See the microsoft references */
CryptImportKey(cryptoProvider, reinterpret_cast<BYTE*>(&kd), sizeof(kd),0, CRYPT_IPSEC_HMAC_KEY, &cryptKey);
/* use cryptKey in the call to CryptCreateHash when you create your CALG_HMAC */
}
Обязательно замените длину на фактическую длину вашего ключа.