Receber uma mensagem de dados envelopada

[CAPICOM é um componente somente de 32 bits que está disponível para uso nos seguintes sistemas operacionais: Windows Server 2008, Windows Vista e Windows XP. Em vez disso, use o .NET Framework para implementar recursos de segurança. Para obter mais informações, consulte Alternativas ao Uso do CAPICOM.]

Para desencriptar uma mensagem envelopada, o destinatário corresponde a um certificado da loja My store que tem uma chave privada disponível com um certificado na mensagem envelopada. Se for encontrada uma correspondência, a chave encriptada associada a esse certificado é desencriptada e essa chave desencriptada é utilizada para desencriptar a mensagem envelopada. Um destinatário da mensagem que não tem um certificado correspondente com uma chave privada disponível não pode desencriptar a mensagem.

No exemplo a seguir, um nome de arquivo é passado para a sub-rotina, esse arquivo é aberto e uma mensagem envelopada é lida. A mensagem envelopada é então desencriptada. As etapas de combinar um certificado de usuário com um certificado na mensagem envelopada, de descriptografar a chave de criptografia e, finalmente, de descriptografar a mensagem são todas feitas nos bastidores. Um erro é gerado se uma correspondência de certificado não for encontrada ou se a descriptografia falhar.

Em qualquer erro CAPICOM, um valor decimal negativo de Err.Number é retornado. Para obter mais informações, consulte CAPICOM_ERROR_CODE. Para obter informações sobre valores decimais positivos de Err.Number , consulte 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