CryptCreateHash

Aus API-Wiki
Zur Navigation springenZur Suche springen

Die Funktion CryptCreateHash erstellt ein Hash Objekt mit dem Hash Werte für Daten berechnet werden können.

Declare Function CryptCreateHash Lib "advapi32.dll" ( _
                 ByVal hProv As Long, _
                 ByVal AlgID As Long, _
                 ByVal hKey As Long, _
                 ByVal dwFlags As Long, _
                 ByRef phHash As Long) As Long


Parameter

phProv

[in] Handle zu einem CSP. Ein solches Handle wird mit CryptAcquireContext erzeugt.

AlgID

[in] Definiert den Hashalgorithmus der verwendet wird. Beispiele sind: CALG_MD5 oder CALG_SHA

hKey

[in] Dieser Parameter wird nur für Schlüsselbasierende Hashes verwendet. Für die gängigen, nicht Schlüsselbasierenden Hashes wie MD5 und SHA muss dieser Parameter 0 sein.

dwFlags

[in] derzeit nicht verwendet, muss 0 sein.

phHash

[out] In diesem Long Wert wird das Handle des erstellten Hash Objekts zurückgegeben. Nachdem das Hash Objekt verwendet wurde, muss es mit CryptDestroyHash zerstört werden.

Rückgabe(n)

Bei Erfolg wird ein Wert ungleich 0 zurückgegeben.

Beispiel

    'Hash Objekt erstellen
    If CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, hHash) <> 0 Then
        'Daten in Hash Objekt schreiben
        If CryptHashData(hHash, VarPtr(btData(0)), UBound(btData) + 1, 0) = 0 Then
            Err.Raise Err.LastDllError, , "CryptHashData Error"
        End If
            
        'Länge des Hash's feststellen:
        If CryptGetHashParam(hHash, HP_HASHVAL, 0, lHashLen, 0) <> 0 Then
        	'Hash auslesen:
            ReDim btData(lHashLen - 1)
            If CryptGetHashParam(hHash, HP_HASHVAL, VarPtr(bData(0)), lHashLen, 0) <> 0 Then
                'Success
            Else
                Err.Raise Err.LastDllError, , "CryptGetHashParam Error"
            End If
        Else
            Err.Raise Err.LastDllError, , "CryptGetHashParam Error"
        End If
    Else
        Err.Raise Err.LastDllError, , "CryptCreateHash Error"
    End If

   'Hash wieder zerstören:
    If CryptDestroyHash(hHash) = 0 Then
        Err.Raise Err.LastDllError, , "CryptDestroyHash Error"
    End If