Le public déclare la bibliothèque « advapi32.dll » dit « CryptAcquireContextA » de CryptAcquireContext de fonction (le _
phProv en tant que longtemps, pszContainer de ByVal en tant que longtemps, pszProvider de ByVal comme corde, _
dwProvType de ByVal en tant que dwFlags longtemps, de ByVal en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptCreateHash de fonction (hProv de ByVal en tant que longtemps, le _
ByVal algide en tant que hKey longtemps, de ByVal en tant que les dwFlags longtemps, de ByVal en tant que longtemps, phHash en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptHashData de fonction (hHash de ByVal en tant que longtemps, le _
Le pbData de ByVal comme corde, ByVal dwDataLen en tant que dwFlags longtemps, de ByVal en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptDeriveKey de fonction (le _
hProv de ByVal en tant que longtemps, ByVal algide en tant que longtemps, hBaseData de ByVal en tant que longtemps, dwFlags de ByVal en tant que longtemps, _
phKey en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptDestroyHash de fonction (hHash de ByVal en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptDestroyKey de fonction (hKey de ByVal en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptEncrypt de fonction (hKey de ByVal en tant que longtemps, le _
hHash de ByVal en tant que longtemps, finale de ByVal en tant que longtemps, dwFlags de ByVal en tant que longtemps, pbData de ByVal comme corde, _
pdwDataLen comme longtemps, ByVal dwBufLen comme longtemps) comme longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptDecrypt de fonction (hKey de ByVal en tant que longtemps, le _
hHash de ByVal en tant que longtemps, finale de ByVal en tant que longtemps, dwFlags de ByVal en tant que longtemps, pbData de ByVal comme corde, _
pdwDataLen en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « advapi32.dll » de CryptReleaseContext de fonction (hProv de ByVal en tant que longtemps, le _
dwFlags de ByVal en tant que longtemps) en tant que longtemps
Le public déclare la bibliothèque « kernel32 » de GetLastError de fonction () en tant que longtemps
'constantes pour des fonctions de la cryptographie api
Const privé CRYPT_NEWKEYSET = &H8
Const privé MS_DEF_PROV = « Microsoft Base Cryptographic Provider v1.0 »
Const privé PROV_RSA_FULL = 1
Const privé ALG_CLASS_DATA_ENCRYPT = 24576
Const privé ALG_CLASS_HASH = 32768
Const privé ALG_TYPE_ANY = 0
Const privé ALG_TYPE_BLOCK = 1536
Const privé ALG_TYPE_STREAM = 2048
Const privé ALG_SID_RC2 = 2
Const privé ALG_SID_RC4 = 1
Const privé ALG_SID_SHA1 = 4
Const privé ALG_SID_MD5 = 3
Const privé CALG_SHA1 = ((ALG_CLASS_HASH ou ALG_TYPE_ANY) ou ALG_SID_SHA1)
Const privé CALG_MD5 = ((ALG_CLASS_HASH ou ALG_TYPE_ANY) ou ALG_SID_MD5)
Const privé CALG_RC2 = ((ALG_CLASS_DATA_ENCRYPT ou ALG_TYPE_BLOCK) ou ALG_SID_RC2)
Const privé CALG_RC4 = ((ALG_CLASS_DATA_ENCRYPT ou ALG_TYPE_STREAM) ou ALG_SID_RC4)
Const privé ENCRYPT_ALGORITHM = CALG_RC2
Const privé ENCRYPT_BLOCK_SIZE = 1
Const privé CRYPT_EXPORTABLE = 1
'spécifiaient pour ne pas employer n'importe quelle valeur de sel tout en dérivant la clef
Const privé CRYPT_NO_SALT en tant que longtemps = &H10
Fonction privée CryptoDecrypt (sInputBuffer comme corde, sPassword comme sErrore de corde, de ByRef comme corde) comme corde
Faible lHExchgKey en tant que longtemps
Faible lHCryptprov en tant que longtemps
Faible lHHash en tant que longtemps
Faible lHkey en tant que longtemps
Faible lResult en tant que longtemps
Faible sProvider comme corde
Faible sCryptBuffer comme corde
Faible lCryptBufLen en tant que longtemps
Obscurcir le lCryptPoint en tant que longtemps
Obscurcir le lPasswordPoint en tant que longtemps
Obscurcir le lPasswordCount en tant que longtemps
Sur l'erreur DecryptError GoTo
'obtenir la poignée au défaut CSP.
sProvider = vbNullChar
sProvider = MS_DEF_PROV et vbNullChar
Sinon CBool (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, 0)) Puis
'S'il n'y a aucun récipient de clef de défaut puis crée un using le champ de drapeaux
Si GetLastError = 0 puis
Sinon CBool (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET)) Puis
De finition GoTo
Finir si
Finir si
Finir si
'Créer un objet de gâchis
Sinon CBool (CryptCreateHash (lHCryptprov, CALG_SHA1, 0, 0, lHHash)) Puis
De finition GoTo
Finir si
'Hacher dans le texte de mot de passe
Sinon CBool (CryptHashData (lHHash, sPassword, Len (sPassword), 0)) Puis
De finition GoTo
Finir si
'Créer une clef de session de l'objet de gâchis
Sinon CBool (CryptDeriveKey (lHCryptprov, ENCRYPT_ALGORITHM, lHHash, ByVal CRYPT_NO_SALT, lHkey)) Puis
De finition GoTo
Finir si
'Détruire l'objet de gâchis.
CryptDestroyHash (lHHash)
lHHash = 0
'Préparer le sCryptBuffer pour CryptDecrypt
lCryptBufLen = Len (le sInputBuffer)
sCryptBuffer = corde (lCryptBufLen, vbNullChar)
sCryptBuffer = sInputBuffer de LSet
'Données de déchiffrage
Sinon CBool (CryptDecrypt (le lHkey, 0, 1, 0, le sCryptBuffer, lCryptBufLen)) Puis
De finition GoTo
Finir si
'Installer l'amortisseur de rendement avec juste des données déchiffrées
CryptoDecrypt = mi (le sCryptBuffer, 1, lCryptBufLen)
De finition :
'Détruire la clef de session
Si (lHkey) puis lResult = CryptDestroyKey (lHkey)
'Détruire la poignée principale de clef d'échange
Si lHExchgKey puis CryptDestroyKey (lHExchgKey)
'Détruire l'objet de gâchis
Si lHHash puis CryptDestroyHash (lHHash)
'Libérer la poignée de fournisseur de contexte
Si lResult de lHCryptprov puis = CryptReleaseContext (lHCryptprov, 0)
Sortir la fonction
DecryptError :
msgbox (GetLastError)
Class= >
" clair " de l'extrémité Function