Erstellen eines HMAC

So berechnen Sie einen HMAC

  1. Rufen Sie einen Zeiger auf den Microsoft Cryptographic Service Provider (CSP) ab, indem Sie CryptAcquireContextaufrufen.
  2. Erstellen Sie ein Handle für ein HMAC-Hashobjekt, indem Sie CryptCreateHashaufrufen. Ü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 dem Berechnen 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 mit einem Hashwert versehen, und dann werden die Zieldaten für den HMAC (auf den der pbData-Parameter verweist, der im Aufruf von CryptHashData übergeben wird) mit einem Hashwert versehen. Bei Bedarf können nachfolgende Aufrufe von CryptHashData durchgefü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 mit einem Hashwert versehen, und dann wird das Ergebnis des inneren Hashs (abgeschlossen im vorherigen Schritt) mit einem Hashwert versehen. Der äußere Hash wird dann fertig gestellt und im pbData-Parameter und der Länge im dwDataLen-Parameter zurückgegeben.

Hinweis

Verwenden Sie nicht denselben symmetrischen Schlüssel (Sitzungsschlüssel)sowohl für die Nachrichtenverschlüsselung als auch für Nachrichtenauthentifizierungscode (MAC). Die Verwendung desselben Schlüssels für beide erhöht erheblich das Risiko, dass Nachrichten von Angreifern decodiert werden.