Il pubblico dichiara il movimento di liberazione “advapi32.dll„ altrimenti detto “CryptAcquireContextA„ di CryptAcquireContext di funzione (_
phProv come lungamente, pszContainer di ByVal come lungamente, pszProvider di ByVal come stringa, _
dwProvType di ByVal come dwFlags di ByVal, lungamente come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptCreateHash di funzione (hProv di ByVal come lungamente, _
ByVal algido come hKey di ByVal, lungamente come i dwFlags di ByVal, lungamente come lungamente, phHash come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptHashData di funzione (hHash di ByVal come lungamente, _
Il pbData come stringa, ByVal di ByVal dwDataLen come dwFlags di ByVal, lungamente come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptDeriveKey di funzione (_
hProv di ByVal come lungamente, ByVal algido come lungamente, hBaseData di ByVal come lungamente, dwFlags di ByVal come lungamente, _
phKey come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptDestroyHash di funzione (hHash di ByVal come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptDestroyKey di funzione (hKey di ByVal come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptEncrypt di funzione (hKey di ByVal come lungamente, _
hHash di ByVal come lungamente, finale di ByVal come lungamente, dwFlags di ByVal come lungamente, pbData di ByVal come stringa, _
pdwDataLen come lungamente, ByVal dwBufLen come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptDecrypt di funzione (hKey di ByVal come lungamente, _
hHash di ByVal come lungamente, finale di ByVal come lungamente, dwFlags di ByVal come lungamente, pbData di ByVal come stringa, _
pdwDataLen come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “advapi32.dll„ di CryptReleaseContext di funzione (hProv di ByVal come lungamente, _
dwFlags di ByVal come lungamente) come lungamente
Il pubblico dichiara il movimento di liberazione “kernel32„ di GetLastError di funzione () come lungamente
'costanti per le funzioni della crittografia api
Const riservato CRYPT_NEWKEYSET = &H8
Const riservato MS_DEF_PROV = “Microsoft Base Cryptographic Provider v1.0„
Const riservato PROV_RSA_FULL = 1
Const riservato ALG_CLASS_DATA_ENCRYPT = 24576
Const riservato ALG_CLASS_HASH = 32768
Const riservato ALG_TYPE_ANY = 0
Const riservato ALG_TYPE_BLOCK = 1536
Const riservato ALG_TYPE_STREAM = 2048
Const riservato ALG_SID_RC2 = 2
Const riservato ALG_SID_RC4 = 1
Const riservato ALG_SID_SHA1 = 4
Const riservato ALG_SID_MD5 = 3
Const riservato CALG_SHA1 = ((ALG_CLASS_HASH o ALG_TYPE_ANY) o ALG_SID_SHA1)
Const riservato CALG_MD5 = ((ALG_CLASS_HASH o ALG_TYPE_ANY) o ALG_SID_MD5)
Const riservato CALG_RC2 = ((ALG_CLASS_DATA_ENCRYPT o ALG_TYPE_BLOCK) o ALG_SID_RC2)
Const riservato CALG_RC4 = ((ALG_CLASS_DATA_ENCRYPT o ALG_TYPE_STREAM) o ALG_SID_RC4)
Const riservato ENCRYPT_ALGORITHM = CALG_RC2
Const riservato ENCRYPT_BLOCK_SIZE = 1
Const riservato CRYPT_EXPORTABLE = 1
'ha usato per specificare per non usare alcun valore del sale mentre derivavano la chiave
Const riservato CRYPT_NO_SALT come lungamente = &H10
Funzione riservata CryptoDecrypt (sInputBuffer come stringa, sPassword come sErrore di ByRef, della stringa come stringa) come stringa
lHExchgKey fioco come lungamente
lHCryptprov fioco come lungamente
lHHash fioco come lungamente
lHkey fioco come lungamente
lResult fioco come lungamente
sProvider fioco come stringa
sCryptBuffer fioco come stringa
Fioco lCryptBufLen come lungamente
Oscurare il lCryptPoint come lungamente
Oscurare il lPasswordPoint come lungamente
Oscurare il lPasswordCount come lungamente
Sull'errore DecryptError di avanzamento
'ottenere la maniglia al difetto CSP.
sProvider = vbNullChar
sProvider = MS_DEF_PROV & vbNullChar
Se non CBool (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, 0)) Allora
'Se non ci è contenitore di chiave di difetto quindi generare uno using il campo delle bandierine
Se GetLastError = 0 allora
Se non CBool (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET)) Allora
Finished di avanzamento
Concluder se
Concluder se
Concluder se
'Generare un oggetto del hash
Se non CBool (CryptCreateHash (lHCryptprov, CALG_SHA1, 0, 0, lHHash)) Allora
Finished di avanzamento
Concluder se
'Tritare nel testo di parola d'accesso
Se non CBool (CryptHashData (lHHash, sPassword, Len (sPassword), 0)) Allora
Finished di avanzamento
Concluder se
'Generare una chiave di sessione dall'oggetto del hash
Se non CBool (CryptDeriveKey (lHCryptprov, ENCRYPT_ALGORITHM, lHHash, ByVal CRYPT_NO_SALT, lHkey)) Allora
Finished di avanzamento
Concluder se
'Distruggere l'oggetto del hash.
CryptDestroyHash (lHHash)
lHHash = 0
'Preparare lo sCryptBuffer per CryptDecrypt
lCryptBufLen = Len (sInputBuffer)
sCryptBuffer = stringa (lCryptBufLen, vbNullChar)
sCryptBuffer = sInputBuffer di LSet
'Dati di Decrypt
Se non CBool (CryptDecrypt (lHkey, 0, 1, 0, lo sCryptBuffer, lCryptBufLen)) Allora
Finished di avanzamento
Concluder se
'Installare l'amplificatore di uscita con appena i dati decifrati
CryptoDecrypt = metà di (sCryptBuffer, 1, lCryptBufLen)
Finished:
'Distruggere la chiave di sessione
Se (lHkey) allora lResult = CryptDestroyKey (lHkey)
'Distruggere la maniglia chiave di chiave di scambio
Se lHExchgKey allora CryptDestroyKey (lHExchgKey)
'Distruggere l'oggetto del hash
Se lHHash allora CryptDestroyHash (lHHash)
'Liberare la maniglia del fornitore di contesto
Se lResult del lHCryptprov allora = CryptReleaseContext (lHCryptprov, 0)
Uscire la funzione
DecryptError:
msgbox (GetLastError)
Class= > " libero " dell'estremità Function