次の方法で共有


HMAC の作成

HMAC を計算するには

  1. CryptAcquireContext を呼び出して、Microsoft Cryptographic Service Provider (CSP) へのポインターを取得します。
  2. CryptCreateHash を呼び出して、HMACハッシュ オブジェクトへのハンドルを作成します。 Algid パラメーターにCALG_HMACを渡します。 対称 キー のハンドルを hKey パラメーターに渡します。 この対称キーは、HMAC の計算に使用されるキーです。
  3. dwParam パラメーターを値HP_HMAC_INFOに設定して CryptSetHashParam を呼び出すことによって使用するハッシュの種類を指定します。 pbData パラメーターは、初期化されたHMAC_INFO構造体を指す必要があります。
  4. CryptHashData を呼び出して、データの HMAC の計算を開始します。 CryptHashData を最初に呼び出すと、XOR 演算子と内部文字列とデータを使用してキー値が結合されます。 XOR 操作の結果がハッシュされ、HMAC のターゲット データ (CryptHashData の呼び出しで渡された pbData パラメーターによって指されます) がハッシュされます。 必要に応じて、 CryptHashData への後続の呼び出しを行って、ターゲット データのハッシュを完了できます。
  5. dwParam パラメーターを HP_HASHVAL に設定して CryptGetHashParam を呼び出します。 この呼び出しにより、内部ハッシュが完了し、外部文字列が XOR とキーを使用して結合されます。 XOR 操作の結果がハッシュされ、(前の手順で完了した) 内部ハッシュの結果がハッシュされます。 次に、外部ハッシュが終了し、pbData パラメーターと dwDataLen パラメーターの長さで返されます。

Note

メッセージ暗号化とメッセージ認証コード (MAC) 生成の両方に同じ対称 (セッション) キーを使用しないでください。 両方に同じキーを使用すると、攻撃者によってメッセージがデコードされるリスクが大幅に高まります。