我需要在Windows上的程序中計算HMAC SHA。這個程序早些時候用在Linux上運行openssl。現在我需要將它移植到Windows,但我不確定Windows平臺SDK是否提供了任何方法來計算HMAC SHA。如何計算Windows上的HMAC SHA?
我通過以下msdn上的鏈接,但我不知道 - http://msdn.microsoft.com/en-us/library/aa382453(v=VS.85).aspx。
讓我知道未來最好的辦法是什麼。現有的方案是在C.
我需要在Windows上的程序中計算HMAC SHA。這個程序早些時候用在Linux上運行openssl。現在我需要將它移植到Windows,但我不確定Windows平臺SDK是否提供了任何方法來計算HMAC SHA。如何計算Windows上的HMAC SHA?
我通過以下msdn上的鏈接,但我不知道 - http://msdn.microsoft.com/en-us/library/aa382453(v=VS.85).aspx。
讓我知道未來最好的辦法是什麼。現有的方案是在C.
如果你想使用包含在操作系統的API,那麼你找到的鏈接就可以了 - 更多信息,請參閱http://msdn.microsoft.com/en-us/library/aa380255%28v=vs.85%29.aspx
或者,您在尋找一些第三方的lib一些具體功能?如果您已經熟悉openssl,則它也可用於Windows ...請參閱http://www.slproweb.com/products/Win32OpenSSL.html
如果您明確地擁有密鑰,則可能更容易從SHA原語的兩次調用中明確編程HMAC,而不是嘗試讓Windows密碼API知道密鑰。 HMAC本身在RFC 2104中指定,並且Windows可以使用CryptCreateHash,CryptHashData和CryptGetHashParam爲您執行SHA哈希。
謝謝。是的,我有祕密鑰匙。我只需要使用鍵來計算摘要。在這種情況下,如你所說,使用Windows API就足夠了? – sthustfo
您可以使用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 */
}
確保你的鑰匙的實際長度更換長度。
感謝您的建議。在openssl的slproweb網址上,有許多openssl安裝程序的變種。這適合我的情況? Win32 OpenSSL v1.0.0d版本? – sthustfo