Erstellen eines HMAC
So berechnen Sie einen HMAC
- Rufen Sie einen Zeiger auf den Microsoft Cryptographic Service Provider (CSP) ab, indem Sie CryptAcquireContext aufrufen.
- 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.
- 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.
- 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.
- 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.