Partager via


Déchiffrement d’un message dans CAPICOM

[CAPICOM est un composant 32 bits uniquement disponible pour une utilisation dans les systèmes d’exploitation suivants : Windows Server 2008, Windows Vista et Windows XP. Utilisez plutôt .NET Framework pour implémenter des fonctionnalités de sécurité. Pour plus d’informations, consultez Alternatives à l’utilisation de CAPICOM.]

Cette sous-routine prend une chaîne de mot de passe à utiliser pour générer une clé de chiffrement de session et le nom d’un fichier à partir duquel un message chiffré sera lu. Tous les paramètres sont passés dans la sous-routine par des valeurs.

Notes

CAPICOM ne prend pas en charge le type de contenu PKCS #7 EncryptedData, mais utilise une structure ASN non standard pour EncryptedData. Par conséquent, seul CAPICOM peut déchiffrer un objet CAPICOM EncryptedData.

 

Si le déchiffrement échoue, la valeur Err.Number est vérifiée pour déterminer si l’erreur a été provoquée par l’utilisation d’un mot de passe qui ne correspond pas au mot de passe utilisé pour chiffrer le message. Dans ce cas, l’erreur NTE_BAD_DATA est retournée.

En cas d’erreur CAPICOM, une valeur décimale négative de Err.Number est retournée. Pour plus d’informations, consultez CAPICOM_ERROR_CODE. Pour plus d’informations sur les valeurs décimales positives de Err.Number, consultez Winerror.h.

Sub DecryptMessage(ByVal hidden As String, ByVal filename As String)
On Error goto ErrorHandler

'Declare an EncryptedData object

Dim message As New EncryptedData

'Declare a string variable to hold the encrypted message.
Dim encrypted As String

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

' If a message was read in (the length of the input string is 
' greater than 0), set the password and decrypt the message.
If Len(encrypted) > 0 then
    ' Set the password used to generate the key
    ' used to decrypt the message. If the password
    ' not the same as the password used when the message
    ' was encrypted, decryption will fail.
    ' The algorithm name and key length set in the encrypting
    ' process are automatically used to decrypt the message. 
    message.SetSecret hidden
    message.Decrypt encrypted
    ' Display the decrypted message.
    MsgBox message.Content
else
    msgbox "No encrypted message was read in.
endif

' Release the EncryptedData object and exit the subroutine.
Set message = Nothing
Exit Sub

ErrorHandler:
If Err.Number > 0 Then
    MsgBox "Visual Basic error found:" & Err.Description
Else
'    Check for a bad password error.
    If Err.Number = -2146893819 Then
        MsgBox "Error. The password may not be correct."
    Else
        MsgBox "CAPICOM error found : " & Err.Number
    End If
End If
End Sub