Freigeben über


Erstellen eines HMAC

So berechnen Sie einen HMAC

  1. Rufen Sie einen Zeiger auf den Microsoft Cryptographic Service Provider (CSP) ab, indem Sie CryptAcquireContext aufrufen.
  2. Erstellen Sie ein Handle für ein HMAC-Hashobjekt, indem Sie CryptCreateHash aufrufen. Übergeben Sie CALG_HMAC im Algid-Parameter . Übergeben Sie das Handle eines symmetrischen Schlüssels im hKey-Parameter . Dieser symmetrische Schlüssel ist der Schlüssel, der zum Berechnen des HMAC verwendet wird.
  3. Geben Sie den Typ des zu verwendenden Hashs an, indem Sie CryptSetHashParam aufrufen, wobei der dwParam-Parameter auf den Wert HP_HMAC_INFO festgelegt ist. Der pbData-Parameter muss auf eine initialisierte HMAC_INFO Struktur verweisen.
  4. Rufen Sie CryptHashData auf, um mit der Berechnung des HMAC der Daten zu beginnen. Der erste Aufruf von CryptHashData bewirkt, dass der Schlüsselwert mithilfe des XOR-Operators mit der inneren Zeichenfolge und den Daten kombiniert wird. Das Ergebnis des XOR-Vorgangs wird gehasht, und dann werden die Zieldaten für den HMAC (auf die durch den pbData-Parameter verwiesen wird, der im Aufruf von CryptHashData übergeben wird) gehasht. Bei Bedarf können nachfolgende Aufrufe von CryptHashData ausgeführt werden, um das Hashing der Zieldaten abzuschließen.
  5. Rufen Sie CryptGetHashParam auf, wobei der dwParam-Parameter auf HP_HASHVAL festgelegt ist. Dieser Aufruf bewirkt, dass der innere Hash abgeschlossen und die äußere Zeichenfolge mithilfe von XOR mit dem Schlüssel kombiniert wird. Das Ergebnis des XOR-Vorgangs wird gehasht, und dann wird das Ergebnis des inneren Hashs (abgeschlossen im vorherigen Schritt) gehasht. Der äußere Hash wird dann abgeschlossen und im pbData-Parameter und der Länge im dwDataLen-Parameter zurückgegeben.

Hinweis

Verwenden Sie nicht denselben symmetrischen (Sitzungs-)Schlüssel sowohl für die Nachrichtenverschlüsselung als auch für die Mac-Generierung (Message Authentication Code ). Die Verwendung desselben Schlüssels für beide erhöht das Risiko, dass Nachrichten von Angreifern decodiert werden.