2011-08-06 10 views
0

Windows上のプログラムでHMAC SHAを計算する必要があります。このプログラムは、以前はopensslを使用していたLinux上で動作していました。今私はそれをWindowsに移植する必要がありますが、WindowsプラットフォームSDKがHMAC SHAを計算する手段を提供しているかどうかはわかりません。WindowsでHMAC SHAを計算するには?

私はmsdnの次のリンクを渡っていますが、わかりません - http://msdn.microsoft.com/en-us/library/aa382453(v=VS.85).aspx

私のために最善の方法が何であるか教えてください。既存のプログラムOSに含まれますが、APIを使用したい場合C.

答えて

0

である、あなたが見つけたリンクはokです - より多くの情報がhttp://msdn.microsoft.com/en-us/library/aa380255%28v=vs.85%29.aspx

それとも、いくつかと、いくつかのサードパーティ製のlibに探しているを参照してください特定の機能 ?

+0

提案していただきありがとうございます。 opensslのslproweb urlには、opensslインストーラの多くの亜種があります。私の場合はどちらが適していますか? Win32 OpenSSL v1.0.0dバージョン? – sthustfo

2

明示的にキーがある場合、SHAプリミティブの2回の呼び出しから明示的にHMACをプログラムする方が簡単ですキーをWindows暗号APIに知らせるようにします。 HMAC自体はRFC 2104で規定されており、WindowsではCryptCreateHash、CryptHashData、CryptGetHashParamを使用してSHAハッシュを実行できます。

+0

ありがとうございます。はい、私は秘密鍵を持っています。私はちょうどキーを使ってダイジェストを計算する必要があります。この場合、あなたが示唆したように、Windows APIを使用すれば十分でしょうか? – sthustfo

2

CryptImportKeyを使用して、Windows暗号化サービスプロバイダにキーを取得できます。その後、MSDN example HMACコードに従ってください。キーをCSPに取り入れるための秘訣は、長さがBLOBHEADERDWORD、キーがchar []の3つを保持する構造体を作ることです。

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 */ 
} 

あなたの鍵の実際の長さと長さを置き換えてください:それは次のようになりますので、私はあなたが生の鍵データを持っていると推定されます。

関連する問題