|
|
|
Шифрование...
|
|||
|---|---|---|---|
|
#18+
Народ, были проблемы с файлом реестра, после его "востановления" почему-то не работает код, проверяющий шифрованные данные. Проверка зашифрованных данных производится по следующему алгоритму, показаном на этом форуме: 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? На другой и нескольких машинах это проблемы нет, но нужно понять, что и как должно быть зарегистрированно в реестре, чтобы понимать из-за чего система не отрабатыват заданный код. Всем огромное спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2008, 01:45 |
|
||
|
Шифрование...
|
|||
|---|---|---|---|
|
#18+
Мда, до чего народ ленивый пошел Открываем 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-библиотеках они находятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2008, 12:13 |
|
||
|
Шифрование...
|
|||
|---|---|---|---|
|
#18+
Владимир здравствуй, Это все понятно, я потом это все нарыл, но дело в том что это произошло после того кк мне запороли мой профайл, я его ручками как-то приподнял и полсе этого все траблы.. Но мне важнее знать что является причиной этой ситуации, так как у меня построена вся логика на этом классе, и права доступа к элементам форм раздаются из зашифрованных данных. И я могу себе представить что произойдет у заказчика если он как-то снесет себе свой профайл или у него что-то произойдет с реестром что и вызовет такие сбои. Суть такова что система никак не ругаетмся на отсутствие библиотек, она просто тупо их пропускает шифрованные даные сквозь себя один в один. Тоесть ни зашифровать, ни расшифровать невозможно. Но и на том спасибо, будет искать альтернативу, нужно только класс подменить и все... По очень хочеться разобраться. Ветку Cryptgrpahy в реестре смотрел - там все как должно быть (сравнение с рабочими машинками). непонятка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2008, 15:05 |
|
||
|
Шифрование...
|
|||
|---|---|---|---|
|
#18+
ValeriiСуть такова что система никак не ругаетмся на отсутствие библиотек, она просто тупо их пропускает шифрованные даные сквозь себя один в один. Попробуйте для проверки дать в командном окне команду вроде Код: plaintext И посмотрите, куда Вас пошлет FoxPro Однако сообщения об ошибках можно заблокировать, например, перенаправив их вывод куда-то еще при помощи настройки ON ERROR или Try...Catch. Код: plaintext 1. 2. 3. 4. Поэтому посмотрите, как в Вашем приложении сделан обработчик ошибок. Видимо, Вы просто подавляете сообщение об ошибке никак его не обрабатывая. За что и поплатились в данном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2008, 16:02 |
|
||
|
Шифрование...
|
|||
|---|---|---|---|
|
#18+
Вот именно что все ок!!! Оно ни как не ругается, а все типа нормально... Это и угнетает. При вводе 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 функции неработоспосбными, будем ставить ОС по-новой.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2008, 11:27 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=174&tid=1588325]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 299ms |

| 0 / 0 |
