Delen via


Een HMAC maken

Een HMAC- berekenen

  1. Vraag een aanwijzer naar de Microsoft Cryptographic Service Provider (CSP) door CryptAcquireContextaan te roepen.
  2. Maak een ingang naar een HMAChash-object door CryptCreateHash-aan te roepen. Geef CALG_HMAC door in de parameter Algid-. Geef de symmetrische sleutel door in de parameter hKey. Deze symmetrische sleutel is de sleutel die wordt gebruikt om de HMAC te berekenen.
  3. Geef het type hash op dat moet worden gebruikt door CryptSetHashParam- aan te roepen met de parameter dwParam ingesteld op de waarde HP_HMAC_INFO. De parameter pbData moet verwijzen naar een geïnitialiseerde HMAC_INFO structuur.
  4. Roep CryptHashData- aan om te beginnen met het berekenen van de HMAC van de gegevens. De eerste aanroep van CryptHashData zorgt ervoor dat de sleutelwaarde wordt gecombineerd met behulp van de XOR-operator met de binnenste tekenreeks en de gegevens. Het resultaat van de XOR-bewerking wordt gehasht en vervolgens worden de doelgegevens voor de HMAC (aangegeven door de parameter pbData die is doorgegeven in de aanroep naar CryptHashData) gehasht. Indien nodig kunnen volgende aanroepen naar CryptHashData- worden uitgevoerd om de hashing van de doelgegevens te voltooien.
  5. Roep CryptGetHashParam- op met de parameter dwParam ingesteld op HP_HASHVAL. Deze aanroep zorgt ervoor dat de binnenste hash wordt afgerond en dat de buitenste tekenreeks wordt gecombineerd door middel van XOR met de sleutel. Het resultaat van de XOR-bewerking wordt gehasht, en vervolgens wordt het resultaat van de innerlijke hash (voltooid in de vorige stap) opnieuw gehasht. De buitenste hash wordt vervolgens afgerond en geretourneerd via de parameter pbData en de lengte via de parameter dwDataLen.

Notitie

Gebruik niet dezelfde symmetrische (sessie-) voor zowel berichtversleuteling als mac-generatie (Message Authentication Code). Het gebruik van dezelfde sleutel voor beide verhoogt het risico dat berichten worden gedecodeerd door aanvallers.