Freigeben über


Empfangen einer umhüllten Datennachricht

[CAPICOM ist eine nur 32-Bit-Komponente, die für die Verwendung in den folgenden Betriebssystemen verfügbar ist: Windows Server 2008, Windows Vista und Windows XP. Verwenden Sie stattdessen die .NET Framework, um Sicherheitsfeatures zu implementieren. Weitere Informationen finden Sie unter Alternativen zur Verwendung von CAPICOM.]

Zum Entschlüsseln einer umhüllten Nachricht vergleicht der Empfänger ein Zertifikat aus dem Mein Speicher, das über einen verfügbaren privaten Schlüssel mit einem Zertifikat in der umhüllten Nachricht verfügt. Wenn eine Übereinstimmung gefunden wird, wird der diesem Zertifikat zugeordnete verschlüsselte Schlüssel entschlüsselt, und dieser entschlüsselte Schlüssel wird verwendet, um die umhüllte Nachricht zu entschlüsseln. Ein Nachrichtenempfänger, der nicht über ein übereinstimmende Zertifikat mit einem verfügbaren privaten Schlüssel verfügt, kann die Nachricht nicht entschlüsseln.

Im folgenden Beispiel wird ein Dateiname an die Unterroutine übergeben, diese Datei geöffnet und eine umhüllte Nachricht eingelesen. Die umhüllte Nachricht wird dann entschlüsselt. Die Schritte zum Abgleichen eines Benutzerzertifikats mit einem Zertifikat in der umhüllten Nachricht, zum Entschlüsseln des Verschlüsselungsschlüssels und schließlich zum Entschlüsseln der Nachricht werden im Hintergrund ausgeführt. Ein Fehler wird ausgelöst, wenn ein Zertifikat nicht gefunden wird oder wenn die Entschlüsselung fehlschlägt.

Bei jedem CAPICOM-Fehler wird ein negativer Dezimalwert von Err.Number zurückgegeben. Weitere Informationen finden Sie unter CAPICOM_ERROR_CODE. Informationen zu positiven Dezimalwerten von Err.Number finden Sie unter Winerror.h.

Sub ReceiveMessage(ByVal InFile As String)
On Error GoTo ErrorHandler

'Declare an EnvelopedData object

Dim Envmessage As New EnvelopedData

'Declare a string variable to hold the encrypted message.

Dim Encrypted As String

' Open an input file and read in the encrypted message
Open InFile For Input As #1
Input #1, Encrypted
Close #1

' If the length of the input string is greater than 0, 
' an encrypted message string is available. Decrypt the message.
' Note: to decrypt the message, a certificate with access to
' a user's private key must be available, and that certificate must
' match one of the certificates in the Recipients collection of 
' certificates.
If Len(Encrypted) > 0 Then
    ' Receive and decrypt the message
    Envmessage.Decrypt encrypted
    
    ' Display the decrypted message.
    MsgBox Envmessage.Content
Else
    MsgBox "No enveloped message was read in."
End If
' Release the EncryptedData object.
Set Envmessage = Nothing
Exit Sub

ErrorHandler:
If Err.Number > 0 Then
    MsgBox "Visual Basic error found:" & Err.Description
Else
    MsgBox "CAPICOM error found : " & Err.Number
End If
End Sub