1

WindowsのプログラムでHMACSHAを計算する必要があります。このプログラムは、以前は、opensslを使用していたLinuxで実行されていました。次に、Windowsに移植する必要がありますが、WindowsプラットフォームSDKがHMACSHAを計算する手段を提供しているかどうかはわかりません。

msdnで次のリンクを確認しましたが、わかりません-http://msdn.microsoft.com/en-us/library/aa382453(v=VS.85) .aspx

私にとって最善の方法を教えてください。既存のプログラムはCです。

4

3 に答える 3

3

を使用CryptImportKeyして、Windows 暗号化サービス プロバイダーにキーを取得できます。次に、 MSDN の例の HMACコードに従います。キーを CSP に入れる秘訣はBLOBHEADER、 a DWORD、長さの a 、およびキーの 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 
     This example selects "Microsoft AES Cryptographic Provider"
     which supports SHA-256
  */
  CryptAcquireContext(&cryptoProvider, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT);

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

長さをキーの実際の長さに置き換えてください。

于 2015-09-03T00:03:57.383 に答える
2

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

于 2011-08-06T18:30:57.167 に答える
0

OS に含まれている API を使用する場合は、見つけたリンクで問題ありません。詳細については、 http://msdn.microsoft.com/en-us/library/aa380255%28v=vs.85%29.aspxを参照してください。

それとも、いくつかの特定の機能を備えたサードパーティのライブラリを探していますか? すでにopensslに精通している場合は、Windowsでも利用できます... http://www.slproweb.com/products/Win32OpenSSL.htmlを参照してください

于 2011-08-06T18:26:24.290 に答える