CryptDeriveKey
Aus API-Wiki
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.
Die Funktion CryptDeriveKey erstellt einen Schlüssel zur Verschlüsselung von Daten aus einem Hashwert. Der Hash muss zuvor mittels CryptCreateHash erstellt, und mittels CryptHashData mit einem Passwort befüllt worden sein. Ein identes Passwort, erstellt einen identen Hash und damit einen identen Schlüssel (sofern kein SALT verwendet wird, steuerbar über dwFlags).
Declare Function CryptDeriveKey Lib "advapi32.dll" ( _ ByVal hProv As Long, _ ByVal AlgID As Long, _ ByVal hBaseData As Long, _ ByVal dwFlags As Long, _ ByRef phKey As Long) As Long
Parameter
phProv
- [in] Handle zu einem CSP. Ein solches Handle wird mit CryptAcquireContext erzeugt.
AlgID
- [in] Definiert den Verschlüsselungsalgorithmus für den der Schlüssel verwendet wird. Beispiele sind: CALG_AES_128 oder CALG_3DES_112
hBaseData
- [in] Handle zu einem Hash Objekt, welches mittels CryptCreateHash erstellt wurde.
dwFlags
- [in] Flags welche die Schlüsselerstellung weiter steuern, z.B. CRYPT_EXPORTABLE. Mittels der oberen 16 Bits kann ausserdem die gewünschte Schlüssellänge angegeben werden.
phKey
- [out] In diesem Long Wert wird das Handle des erstellten Schlüssels zurückgegeben. Um den Schlüssel zu zerstören wird CryptDestroyKey verwendet.
Rückgabe(n)
Bei Erfolg wird ein Wert ungleich 0 zurückgegeben.
Beispiel
'Hash Objekt erstellen If CryptCreateHash(hCryptProv, CALG_SHA, 0, 0, hHash) <> 0 Then 'Daten in Hash Objekt schreiben If CryptHashData(hHash, StrPtr(sPwd), LenB(sPwd), 0) <> 0 Then 'Schlüssel aus Daten erzeugen lassen: If CryptDeriveKey(hCryptProv, lCryptAlgo, hHash, lKeyLength * &H10000 Or CRYPT_NO_SALT, hSessionKey) = 0 Then If Err.LastDllError = NTE_BAD_ALGID Then Err.Raise Err.LastDllError, , "Algorithm not supported!" Else Err.Raise Err.LastDllError, , "CryptDeriveKey Error" End If End If Else Err.Raise Err.LastDllError, , "CryptHashData Error" End If 'Hash wieder zerstören: If CryptDestroyHash(hHash) = 0 Then Err.Raise Err.LastDllError, , "CryptDestroyHash Error" End If Else Err.Raise Err.LastDllError, , "CryptCreateHash Error" End If
Ein komplettes Beispiel zum Ver- und Entschlüsseln findet sich unter CryptDecrypt