2011-08-06 51 views

回答

0

如果你想使用包含在操作系統的API,那麼你找到的鏈接就可以了 - 更多信息,請參閱http://msdn.microsoft.com/en-us/library/aa380255%28v=vs.85%29.aspx

或者,您在尋找一些第三方的lib一些具體功能?如果您已經熟悉openssl,則它也可用於Windows ...請參閱http://www.slproweb.com/products/Win32OpenSSL.html

+0

感謝您的建議。在openssl的slproweb網址上,有許多openssl安裝程序的變種。這適合我的情況? Win32 OpenSSL v1.0.0d版本? – sthustfo

2

如果您明確地擁有密鑰,則可能更容易從SHA原語的兩次調用中明確編程HMAC,而不是嘗試讓Windows密碼API知道密鑰。 HMAC本身在RFC 2104中指定,並且Windows可以使用CryptCreateHash,CryptHashData和CryptGetHashParam爲您執行SHA哈希。

+0

謝謝。是的,我有祕密鑰匙。我只需要使用鍵來計算摘要。在這種情況下,如你所說,使用Windows API就足夠了? – sthustfo

2

您可以使用CryptImportKey將密鑰存入Windows加密服務提供程序。然後按照MSDN example 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 */ 
} 

確保你的鑰匙的實際長度更換長度。