1 >
Публика объявляет псевдоним «CryptAcquireContextA» свободы «advapi32.dll» CryptAcquireContext функции (_ phProv как длиной, pszContainer ByVal как длиной, pszProvider ByVal как шнур, _ dwProvType ByVal как dwFlags длиной, ByVal как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptCreateHash функции (hProv ByVal как длиной, _ ByVal Algid как hKey длиной, ByVal как dwFlags длиной, ByVal как длиной, phHash как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptHashData функции (hHash ByVal как длиной, _ pbData как шнур, ByVal ByVal dwDataLen как dwFlags длиной, ByVal как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptDeriveKey функции (_ hProv ByVal как длиной, ByVal Algid как длиной, hBaseData ByVal как длиной, dwFlags ByVal как длиной, _ phKey как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptDestroyHash функции (hHash ByVal как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptDestroyKey функции (hKey ByVal как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptEncrypt функции (hKey ByVal как длиной, _ hHash ByVal как длиной, выпускные экзамены ByVal как длиной, dwFlags ByVal как длиной, pbData ByVal как шнур, _ pdwDataLen как длиной, ByVal dwBufLen как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptDecrypt функции (hKey ByVal как длиной, _ hHash ByVal как длиной, выпускные экзамены ByVal как длиной, dwFlags ByVal как длиной, pbData ByVal как шнур, _ pdwDataLen как длиной) как длиной Публика объявляет свободу «advapi32.dll» CryptReleaseContext функции (hProv ByVal как длиной, _ dwFlags ByVal как длиной) как длиной Публика объявляет свободу «kernel32» GetLastError функции () как длиной 'константы для функций API тайнописи Приватное Const CRYPT_NEWKEYSET = &H8 Приватное Const MS_DEF_PROV = «Мичрософт Басе Чрыптограпюич Провидер v1.0» Приватное Const PROV_RSA_FULL = 1 Приватное Const ALG_CLASS_DATA_ENCRYPT = 24576 Приватное Const ALG_CLASS_HASH = 32768 Приватное Const ALG_TYPE_ANY = 0 Приватное Const ALG_TYPE_BLOCK = 1536 Приватное Const ALG_TYPE_STREAM = 2048 Приватное Const ALG_SID_RC2 = 2 Приватное Const ALG_SID_RC4 = 1 Приватное Const ALG_SID_SHA1 = 4 Приватное Const ALG_SID_MD5 = 3 Приватное Const CALG_SHA1 = ((ALG_CLASS_HASH или ALG_TYPE_ANY) или ALG_SID_SHA1) Приватное Const CALG_MD5 = ((ALG_CLASS_HASH или ALG_TYPE_ANY) или ALG_SID_MD5) Приватное Const CALG_RC2 = ((ALG_CLASS_DATA_ENCRYPT или ALG_TYPE_BLOCK) или ALG_SID_RC2) Приватное Const CALG_RC4 = ((ALG_CLASS_DATA_ENCRYPT или ALG_TYPE_STREAM) или ALG_SID_RC4) Приватное Const ENCRYPT_ALGORITHM = CALG_RC2 Приватное Const ENCRYPT_BLOCK_SIZE = 1 Приватное Const CRYPT_EXPORTABLE = 1 'использовал для того чтобы определить для использования никакого значения соли пока выводящ ключа Приватное Const CRYPT_NO_SALT как длиной = &H10 Приватная функция CryptoDecrypt (sInputBuffer как шнур, sPassword как sErrore шнура, ByRef как шнур) как шнур Тусклое lHExchgKey как длиной Тусклое lHCryptprov как длиной Тусклое lHHash как длиной Тусклое lHkey как длиной Тусклое lResult как длиной Тусклое sProvider как шнур Тусклое sCryptBuffer как шнур Тускло lCryptBufLen как длиной Затемните lCryptPoint как длиной Затемните lPasswordPoint как длиной Затемните lPasswordCount как длиной На ошибке переход DecryptError 'получите ручку к невыполнению обязательства CSP. sProvider = vbNullChar sProvider = MS_DEF_PROV & vbNullChar Если не CBool, то (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, 0)) После этого 'Если не будет контейнера ключа невыполнения обязательства тогда, то создает одно using поле флагов Если GetLastError = 0 после этого Если не CBool, то (CryptAcquireContext (lHCryptprov, 0&, sProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET)) После этого Переход законченный Закончитесь если Закончитесь если Закончитесь если 'Создайте предмет хэша Если не CBool, то (CryptCreateHash (lHCryptprov, CALG_SHA1, 0, 0, lHHash)) После этого Переход законченный Закончитесь если 'Hash в тексте пароля Если не CBool, то (CryptHashData (lHHash, sPassword, Len (sPassword), 0)) После этого Переход законченный Закончитесь если 'Создайте ключа встречи от предмета хэша Если не CBool, то (CryptDeriveKey (lHCryptprov, ENCRYPT_ALGORITHM, lHHash, ByVal CRYPT_NO_SALT, lHkey)) После этого Переход законченный Закончитесь если 'Разрушьте предмет хэша. CryptDestroyHash (lHHash) lHHash = 0 'Подготовьте sCryptBuffer для CryptDecrypt lCryptBufLen = Len (sInputBuffer) sCryptBuffer = шнур (lCryptBufLen, vbNullChar) sCryptBuffer = sInputBuffer LSet 'Данные по Decrypt Если не CBool, то (CryptDecrypt (lHkey, 0, 1, 0, sCryptBuffer, lCryptBufLen)) После этого Переход законченный Закончитесь если 'Setup буфер выхода с как раз decrypted данными CryptoDecrypt = средний (sCryptBuffer, 1, lCryptBufLen) Законченный: 'Разрушьте ключа встречи Если (lHkey) после этого lResult = CryptDestroyKey, то (lHkey) 'Разрушьте ключевую ручку ключа обменом Если lHExchgKey после этого CryptDestroyKey, то (lHExchgKey) 'Разрушьте предмет хэша Если lHHash после этого CryptDestroyHash, то (lHHash) 'Выпустите ручку провайдера смысла Если lResult lHCryptprov после этого = CryptReleaseContext, то (lHCryptprov, 0) Выходите функция DecryptError: msgbox (GetLastError) Class= " ясное " > конца Function