CryptAcquireContext: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
(Parameter)
Zeile 26: Zeile 26:
  
 
''dwProvType''
 
''dwProvType''
:[in] Der Typ des Providers. Mögliche Werte sind zum Beispiel [[CryptProviderTypes|PROV_RSA_FULL]], [[CryptProviderTypes|PROV_RSA_AES]] oder [[CryptProviderTypes|PROV_RSA_SIG]] (siehe auch http://msdn2.microsoft.com/en-us/library/aa380244.aspx)
+
:[in] Der Typ des Providers. Mögliche Werte sind zum Beispiel [[CryptProviderTypes|PROV_RSA_FULL]], [[CryptProviderTypes|PROV_RSA_AES]] oder [[CryptProviderTypes|PROV_RSA_SIG]]
  
 
''dwFlags''
 
''dwFlags''

Version vom 30. März 2007, 10:28 Uhr

Die API-Funktion CryptAcquireContext stellt eine Verbindung zu einem Cryptographic Service Provider (CSP) her. CSPs stellen Funktionen bereit um Hashes (z.B. MD5 und SHA) zu berechnen und Daten mit symetrischen (z.B. RC4 und DES) und asymetrisch (z.B. RSA und AES) Algorithmen zu Verschlüsseln.

Declare Function CryptAcquireContext Lib "advapi32.dll" _
                 Alias "CryptAcquireContextA" ( _
                 ByRef phProv As Long, _
                 ByRef pszContainer As Any, _
                 ByVal pszProvider As String, _
                 ByVal dwProvType As Long, _
                 ByVal dwFlags As Long) As Long


Parameter

phProv

[out] In diesem Long Wert wird das Handle zu dem geöffneten Provider Kontext zurückgegeben. Nach der Verwendung muss dieses Handle mittels CryptReleaseContext wieder freigegeben werden.

pszContainer

[in] Der Name des Schlüsselcontainers. In einem benannten Schlüsselcontainer gespeicherte Schlüssel sind permanent abgelegt, d.h. auch nach einem Reboot noch verfügbar. Wird für diesen Parameter NULL übergeben, so wird der Default Container des Providers verwendet. Zu Beachten ist hierbei, dass der Container Applikationsübergreifend verwendet wird, sich also mehrere Programme, vorallem bei gemeinsamer Nutzung des Default Containers in die Quere kommen können.
Auf in einem Schlüsselcontainer abgelegte Schlüssel kann nur der erstellende Benutzer und Administratoren zugreifen.

pszProvider

[in] Der Name des gewünschten Cryptographic Service Providers. Die Provider "Microsoft Base Cryptographic Provider v1.0" und "Microsoft Enhanced Cryptographic Provider v1.0" werden meist zusammen mit dem Internetexplorer installiert, sollten also auf jedem System mit IE vorhanden sein.
Die auf einem System installierten Provider findet man bei Bedarf in der Registry unter HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider

dwProvType

[in] Der Typ des Providers. Mögliche Werte sind zum Beispiel PROV_RSA_FULL, PROV_RSA_AES oder PROV_RSA_SIG

dwFlags

[in] Eine Kombination folgender Flags:
CRYPT_VERIFYCONTEXT es wird kein permanenter Schlüsselcontainer erstellt, pszContainer muss hierbei NULL sein. Ein solcher Container kann zur Signaturüberprüfung, zum Hashen und zum Verschlüsseln von Daten bei denen ein Passwort ausserhalb des Containers gespeichert wird, verwendet werden.
CRYPT_NEWKEYSET es wird ein neuer Schlüsselcontainer mit dem in pszContainer angegebenen Namen erstellt.
CRYPT_MACHINE_KEYSET auf den Schlüsselcontainer kann auch vom SYSTEM Konto zugegriffen werden.
CRYPT_DELETEKEYSET der in pszContainer angegebene Container wird gelöscht, in phProv wird in diesem Fall nichts zurückgegeben.
CRYPT_SILENT Die Anzeige eines Benutzer Interfaces wird unterdrückt.
CRYPT_DEFAULT_CONTAINER_OPTIONAL nur in Verbindung mit SmartCard CSPs gültig.

Rückgabe(n)

Bei Erfolg wird ein Wert ungleich 0 zurückgegeben.

Beispiel

Private Const MS_DEF_PROV As String = _
                    "Microsoft Base Cryptographic Provider v1.0" & vbNullChar
Private Const MS_ENHANCED_PROV As String = _
                    "Microsoft Enhanced Cryptographic Provider v1.0" & vbNullChar

    'Provider Kontext anfordern:
    If CryptAcquireContext(hCryptProv, ByVal 0, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) = 0 Then
            
        'Enhanced Provider nicht verfügbar, probieren wir den Base Provider:
        If CryptAcquireContext(hCryptProv, ByVal 0, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) = 0 Then
            'auch kein Base Provider->fail
            Err.Raise Err.LastDllError, , "CryptAcquireContext Error"
        End If
            
    End If