powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Шифрование...
5 сообщений из 5, страница 1 из 1
Шифрование...
    #35043314
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ,
были проблемы с файлом реестра, после его "востановления" почему-то не работает код, проверяющий шифрованные данные.
Проверка зашифрованных данных производится по следующему алгоритму, показаном на этом форуме:


Operation = 1 && Для шифровки

m.PROV_RSA_FULL=1
m.pszProvider='Microsoft Base Cryptographic Provider v1.0'
m.pszContainer=.null.
m.CRYPT_NEWKEYSET=8
m.CALG_MD5=32771
m.CALG_RC2=26114

DECLARE LONG CryptAcquireContext IN win32api LONG @phProv,STRING pszContainer,;
STRING pszProvider,LONG dwProvType,LONG dwFlags
DECLARE LONG CryptCreateHash IN win32api LONG hProv,LONG Algid,LONG hKey,LONG dwFlags,;
LONG @phHash
DECLARE LONG CryptHashData IN win32api LONG hHash,STRING @pbData,LONG dwDataLen,;
LONG dwFlags
DECLARE LONG CryptDeriveKey IN win32api LONG hProv,LONG Algid,LONG hBaseData,;
LONG dwFlags,LONG @phKey
DECLARE LONG CryptEncrypt IN win32api LONG hKey,LONG hHash,LONG Final,LONG dwFlags,;
STRING @pbData,LONG @pdwDataLen,LONG dwBufLen
DECLARE LONG CryptDecrypt IN win32api LONG hKey,LONG hHash,LONG Final,LONG dwFlags,;
STRING @pbData,LONG @pdwDataLen
DECLARE LONG CryptDestroyHash IN win32api LONG hHash
DECLARE LONG CryptDestroyKey IN win32api LONG hKey
DECLARE LONG CryptReleaseContext IN win32api LONG hProv,LONG dwFlags

STORE 0 TO m.hProv,m.hHash,m.hKey
CryptAcquireContext(@m.hProv,m.pszContainer,m.pszProvider,m.PROV_RSA_FULL,m.CRYPT_NEWKEYSET)
CryptAcquireContext(@m.hProv,m.pszContainer,m.pszProvider,m.PROV_RSA_FULL,0)
CryptCreateHash(m.hProv,m.CALG_MD5,0,0,@m.hHash)

m.cpassword='mypassword'
m.dwLength=LEN(m.cpassword)

CryptHashData(m.hHash,@m.cpassword,m.dwLength,0)
CryptDeriveKey(m.hProv,m.CALG_RC2,m.hHash,0,@m.hKey)

IF Operation = 1
m.cstring = "Text To Encrypt"
m.nlenstring=LEN(m.cstring)
m.pbData=.null.
m.pdwDataLen=m.nlenstring
m.dwBufLen=0
CryptEncrypt(m.hKey,0,1,0,@m.pbData,@m.pdwDataLen,m.dwBufLen)
m.pbData=m.cstring+SPACE(m.pdwDataLen-m.nlenstring)
m.dwBufLen=m.pdwDataLen
m.pdwDataLen=m.nlenstring
CryptEncrypt(m.hKey,0,1,0,@m.pbData,@m.pdwDataLen,m.dwBufLen)

CryptDestroyKey(m.hKey)
CryptDestroyHash(m.hHash)
CryptReleaseContext(m.hProv,0)
CLEAR DLLS
WAIT WINDOW ' Result of crypted data: '+ m.pbData
RETURN m.pbData

ELSE
m.pdwDataLen=LEN(cstring)
m.pbData = cstring
CryptDecrypt(m.hKey,0,1,0,@m.pbData,@m.pdwDataLen)

CryptDestroyKey(m.hKey)
CryptDestroyHash(m.hHash)
CryptReleaseContext(m.hProv,0)
CLEAR DLLS

RETURN LEFT(m.pbData,m.pdwDataLen)
ENDIF

Суть в том что значение не шифруется, и результат операции шифрования - тот же текст
Text To Encrypt


Как видно из кода, ссылка на библиотеку Win32Api...сто это за DLL? На другой и нескольких машинах это проблемы нет, но нужно понять, что и как должно быть зарегистрированно в реестре, чтобы понимать из-за чего система не отрабатыват заданный код.
Всем огромное спасибо
...
Рейтинг: 0 / 0
Шифрование...
    #35043392
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, до чего народ ленивый пошел

Открываем HELP по команде DECLARE-DLL и читаем

VFP5If you specify WIN32API for the LibraryName, Visual FoxPro searches for the 32-bit Windows .DLL function in KERNEL32.DLL, GDI32.DLL, USER32.DLL, MPR.DLL, and ADVAPI32.DLL.
VFP9 rus HelpЕсли вы указали WIN32API для LibraryName, Visual FoxPro ищет 32-битные Windows .dll функцию в Kernel32.dll, Gdi32.dll, User32.dll, Mpr.dll и Advapi32.dll
Т.е. Win32API - это не есть какая-то конкретная библиотека. Это указание искать соответствующую API-функцию в одной из библиотек определенного списка.

Только все это ерунда. Поскольку, если бы функция не была найдена, то сразу бы и получил конкретное сообщение об ошибке, что функция не найдена уже на команде DECLARE.

Тебе придется долго и вдумчиво читать HELP по каждой API-функции и анализировать возвращаемый ими результат, чтобы понять в чем проблема. На вскидку, не та версия DLL-библиотек и они не так интерпретриуют полученные параметры. Каких именно? Смотри MSDN по конкретным API-функциям. Там должно быть написано в каких DLL-библиотеках они находятся.
...
Рейтинг: 0 / 0
Шифрование...
    #35043499
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир здравствуй,
Это все понятно, я потом это все нарыл, но дело в том что это произошло после того кк мне запороли мой профайл, я его ручками как-то приподнял и полсе этого все траблы..
Но мне важнее знать что является причиной этой ситуации, так как у меня построена вся логика на этом классе, и права доступа к элементам форм раздаются из зашифрованных данных. И я могу себе представить что произойдет у заказчика если он как-то снесет себе свой профайл или у него что-то произойдет с реестром что и вызовет такие сбои. Суть такова что система никак не ругаетмся на отсутствие библиотек, она просто тупо их пропускает шифрованные даные сквозь себя один в один. Тоесть ни зашифровать, ни расшифровать невозможно.
Но и на том спасибо, будет искать альтернативу, нужно только класс подменить и все...
По очень хочеться разобраться.
Ветку Cryptgrpahy в реестре смотрел - там все как должно быть (сравнение с рабочими машинками).
непонятка...
...
Рейтинг: 0 / 0
Шифрование...
    #35043538
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiСуть такова что система никак не ругаетмся на отсутствие библиотек, она просто тупо их пропускает шифрованные даные сквозь себя один в один.
Попробуйте для проверки дать в командном окне команду вроде

Код: plaintext
DECLARE LONG TestErrorName IN win32api

И посмотрите, куда Вас пошлет FoxPro

Однако сообщения об ошибках можно заблокировать, например, перенаправив их вывод куда-то еще при помощи настройки ON ERROR или Try...Catch.

Код: plaintext
1.
2.
3.
4.
ON ERROR *
DECLARE LONG TestErrorName IN win32api
* Восстановление штатного обработчика ошибок
ON ERROR

Поэтому посмотрите, как в Вашем приложении сделан обработчик ошибок. Видимо, Вы просто подавляете сообщение об ошибке никак его не обрабатывая. За что и поплатились в данном случае.
...
Рейтинг: 0 / 0
Шифрование...
    #35043935
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот именно что все ок!!! Оно ни как не ругается, а все типа нормально...
Это и угнетает.
При вводе
m.PROV_RSA_FULL=1
m.pszProvider='Microsoft Base Cryptographic Provider v1.0'
m.pszContainer=.null.
m.CRYPT_NEWKEYSET=8
m.CALG_MD5=32771
m.CALG_RC2=26114

DECLARE LONG CryptAcquireContext IN win32api LONG @phProv,STRING pszContainer,;
STRING pszProvider,LONG dwProvType,LONG dwFlags

все тихо,
а при
m.PROV_RSA_FULL=1
m.pszProvider='Microsoft Base Cryptographic Provider v1.0'
m.pszContainer=.null.
m.CRYPT_NEWKEYSET=8
m.CALG_MD5=32771
m.CALG_RC2=26114

DECLARE LONG testCryptAcquireContext IN win32api LONG @phProv,STRING pszContainer,;
STRING pszProvider,LONG dwProvType,LONG dwFlags

Cannot find entry point TestCryptAcquireContext in The DLL...
то есть проблема системного реестра как-то очень "красиво" сделала API функции неработоспосбными, будем ставить ОС по-новой..
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Шифрование...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]