El público declara la liberación “advapi32.dll” alias “CryptAcquireContextA” de CryptAcquireContext de la función (el _
phProv como de largo, pszContainer de ByVal como de largo, pszProvider de ByVal como secuencia, _
dwProvType de ByVal como dwFlags de largo, de ByVal como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptCreateHash de la función (hProv de ByVal como de largo, el _
ByVal álgido como hKey de largo, de ByVal como dwFlags de largo, de ByVal como de largo, phHash como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptHashData de la función (hHash de ByVal como de largo, el _
El pbData como secuencia, ByVal de ByVal dwDataLen como dwFlags de largo, de ByVal como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptDeriveKey de la función (el _
hProv de ByVal como de largo, ByVal álgido como de largo, hBaseData de ByVal como de largo, dwFlags de ByVal como de largo, _
phKey como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptDestroyHash de la función (hHash de ByVal como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptDestroyKey de la función (hKey de ByVal como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptEncrypt de la función (hKey de ByVal como de largo, el _
hHash de ByVal como de largo, final de ByVal como de largo, dwFlags de ByVal como de largo, pbData de ByVal como secuencia, _
pdwDataLen como de largo, ByVal dwBufLen como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptDecrypt de la función (hKey de ByVal como de largo, el _
hHash de ByVal como de largo, final de ByVal como de largo, dwFlags de ByVal como de largo, pbData de ByVal como secuencia, _
pdwDataLen como de largo) como de largo
El público declara la liberación “advapi32.dll” de CryptReleaseContext de la función (hProv de ByVal como de largo, el _
dwFlags de ByVal como de largo) como de largo
El público declara la liberación “kernel32” de GetLastError de la función () como de largo
'constantes para las funciones del API de la criptografía
Const privado CRYPT_NEWKEYSET = &H8
Const privado MS_DEF_PROV = “Microsoft Base Cryptographic Provider v1.0”
Const privado PROV_RSA_FULL = 1
Const privado ALG_CLASS_DATA_ENCRYPT = 24576
Const privado ALG_CLASS_HASH = 32768
Const privado ALG_TYPE_ANY = 0
Const privado ALG_TYPE_BLOCK = 1536
Const privado ALG_TYPE_STREAM = 2048
Const privado ALG_SID_RC2 = 2
Const privado ALG_SID_RC4 = 1
Const privado ALG_SID_SHA1 = 4
Const privado ALG_SID_MD5 = 3
Const privado CALG_SHA1 = ((ALG_CLASS_HASH o ALG_TYPE_ANY) o ALG_SID_SHA1)
Const privado CALG_MD5 = ((ALG_CLASS_HASH o ALG_TYPE_ANY) o ALG_SID_MD5)
Const privado CALG_RC2 = ((ALG_CLASS_DATA_ENCRYPT o ALG_TYPE_BLOCK) o ALG_SID_RC2)
Const privado CALG_RC4 = ((ALG_CLASS_DATA_ENCRYPT o ALG_TYPE_STREAM) o ALG_SID_RC4)
Const privado ENCRYPT_ALGORITHM = CALG_RC2
Const privado ENCRYPT_BLOCK_SIZE = 1
Const privado CRYPT_EXPORTABLE = 1
'especificaban para no utilizar ninguÌn valor de la sal mientras que derivaba la llave
Const privado CRYPT_NO_SALT como de largo = &H10
Función privada CryptoDecrypt (sInputBuffer como secuencia, sPassword como sErrore de la secuencia, de ByRef como secuencia) como secuencia
lHExchgKey dévil como de largo
lHCryptprov dévil como de largo
lHHash dévil como de largo
lHkey dévil como de largo
lResult dévil como de largo
sProvider dévil como secuencia
sCryptBuffer dévil como secuencia
Dévil lCryptBufLen como de largo
Amortiguar el lCryptPoint como de largo
Amortiguar el lPasswordPoint como de largo
Amortiguar el lPasswordCount como de largo
En el error DecryptError indicado
'conseguir la manija al defecto CSP.
sProvider = vbNullChar
sProvider = MS_DEF_PROV y vbNullChar
Si no CBool (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, 0)) Entonces
'Si no hay envase de la llave de defecto después crea uno usar campo de las banderas
Si GetLastError = 0 entonces
Si no CBool (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET)) Entonces
Finished indicado
Terminar si
Terminar si
Terminar si
'Crear un objeto del picadillo
Si no CBool (CryptCreateHash (lHCryptprov, CALG_SHA1, 0, 0, lHHash)) Entonces
Finished indicado
Terminar si
'Desmenuzar en el texto de la contraseña
Si no CBool (CryptHashData (lHHash, sPassword, Len (sPassword), 0)) Entonces
Finished indicado
Terminar si
'Crear una llave de sesión del objeto del picadillo
Si no CBool (CryptDeriveKey (lHCryptprov, ENCRYPT_ALGORITHM, lHHash, ByVal CRYPT_NO_SALT, lHkey)) Entonces
Finished indicado
Terminar si
'Destruir el objeto del picadillo.
CryptDestroyHash (lHHash)
lHHash = 0
'Preparar el sCryptBuffer para CryptDecrypt
lCryptBufLen = Len (el sInputBuffer)
sCryptBuffer = secuencia (lCryptBufLen, vbNullChar)
sCryptBuffer = sInputBuffer de LSet
'Datos del Decrypt
Si no CBool (CryptDecrypt (el lHkey, 0, 1, 0, el sCryptBuffer, lCryptBufLen)) Entonces
Finished indicado
Terminar si
'Fijar el almacenador intermediario de salida con apenas datos descifrados
CryptoDecrypt = mediados de (el sCryptBuffer, 1, lCryptBufLen)
Finished:
'Destruir la llave de sesión
Si (lHkey) entonces lResult = CryptDestroyKey (lHkey)
'Destruir la manija dominante de la llave del intercambio
Si lHExchgKey entonces CryptDestroyKey (lHExchgKey)
'Destruir el objeto del picadillo
Si lHHash entonces CryptDestroyHash (lHHash)
'Lanzar la manija del abastecedor del contexto
Si lResult del lHCryptprov entonces = CryptReleaseContext (lHCryptprov, 0)
Salir la función
DecryptError:
msgbox (GetLastError)
Class= > " claro " del extremo Function