Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как закодировать DBF- файл? / 14 сообщений из 14, страница 1 из 1
04.02.2007, 15:57
    #34304803
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Нельзя ли закодировать DBF- файл так, чтобы программа его читала и изменяла и программист мог его расшифровать, а для посторонних сделать его не доступным?
...
Рейтинг: 0 / 0
04.02.2007, 16:47
    #34304845
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Можно.
Делаешь функции шифрования/дешифрования для каждого типа данных. А дальше получил данные для записи=>зашифровал=>записал, прочитал=>расшифровал=>используешь
...
Рейтинг: 0 / 0
04.02.2007, 17:07
    #34304869
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Только потом не удивляйся тормознутости программы.
...
Рейтинг: 0 / 0
05.02.2007, 11:03
    #34305697
Погодин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Через win32api функции:

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=INPUTBOX('','Введите пароль','')

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

CREATE CURSOR tmpcrypt(pole1 c(10))
APPEND BLANK
BROWSE FIELDS pole1,pole2=wencrypt(pole1),pole3=wdecrypt(wencrypt(pole1))

CryptDestroyKey(m.hKey)
CryptDestroyHash(m.hHash)
CryptReleaseContext(m.hProv,0)
CLEAR DLLS
CLOSE ALL
*****************************
FUNCTION wencrypt && функция шифрования
PARAMETERS m.cstring
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)
RETURN m.pbData
*****************************
FUNCTION wdecrypt && функция дешифрования
PARAMETERS m.pbData
m.pdwDataLen=LEN(m.pbData)
CryptDecrypt(m.hKey,0,1,0,@m.pbData,@m.pdwDataLen)
RETURN LEFT(m.pbData,m.pdwDataLen)
...
Рейтинг: 0 / 0
05.02.2007, 11:29
    #34305807
Alex Antipenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Можна. Только будут органичения.

Возьми библиотеку "Гепард" -> http://www.planetsquires.com/cheetah.htm

Это система построенная на dbf файлах, поддерживает все форматы фалов даных, использует кодирование и декодирование даных, индексов, мемо. Конечно есть ограничения. Индексы он использует свои.
Занимает один DLL файл, примеры как использовать с разными языками программирования, можна посмотреть там же.

Успехов.


----------------------
www.santysoft.narod.ru
...
Рейтинг: 0 / 0
05.02.2007, 14:08
    #34306437
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
ПогодинЧерез win32api функции:

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=INPUTBOX('','Введите пароль','')

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

CREATE CURSOR tmpcrypt(pole1 c(10))
APPEND BLANK
BROWSE FIELDS pole1,pole2=wencrypt(pole1),pole3=wdecrypt(wencrypt(pole1))

CryptDestroyKey(m.hKey)
CryptDestroyHash(m.hHash)
CryptReleaseContext(m.hProv,0)
CLEAR DLLS
CLOSE ALL
*****************************
FUNCTION wencrypt && функция шифрования
PARAMETERS m.cstring
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)
RETURN m.pbData
*****************************
FUNCTION wdecrypt && функция дешифрования
PARAMETERS m.pbData
m.pdwDataLen=LEN(m.pbData)
CryptDecrypt(m.hKey,0,1,0,@m.pbData,@m.pdwDataLen)
RETURN LEFT(m.pbData,m.pdwDataLen)





Странно, но это примерчик в такой конструкции не работает:
CREATE CURSOR tmpcrypt(pole1 c(50), Pole2 c(150), Pole3 c(50))

m.cpassword='123456'

APPEND BLANK
repl POLE1 with 'Test for Crypting'
Repl pole2 WITH wencrypt(pole1)
repl pole3 WITH wdecrypt(pole2)
BROW

То во что зашифровалось
IВ‘УтDБїѓ«ЏЯ±2OHa˜"q ¬‡eфwж4;F§ўьDеЧ[ЧQћ1lEg5о<‚®
И то что типа расшифровалось:
IВ‘УтDБїѓ«ЏЯ±2OHa˜"q ¬‡eфwж4;F§ўьDеЧ[ЧQћ1lE
...
Рейтинг: 0 / 0
05.02.2007, 14:11
    #34306446
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Valerii ПогодинЧерез win32api функции:

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=INPUTBOX('','Введите пароль','')

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

CREATE CURSOR tmpcrypt(pole1 c(10))
APPEND BLANK
BROWSE FIELDS pole1,pole2=wencrypt(pole1),pole3=wdecrypt(wencrypt(pole1))

CryptDestroyKey(m.hKey)
CryptDestroyHash(m.hHash)
CryptReleaseContext(m.hProv,0)
CLEAR DLLS
CLOSE ALL
*****************************
FUNCTION wencrypt && функция шифрования
PARAMETERS m.cstring
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)
RETURN m.pbData
*****************************
FUNCTION wdecrypt && функция дешифрования
PARAMETERS m.pbData
m.pdwDataLen=LEN(m.pbData)
CryptDecrypt(m.hKey,0,1,0,@m.pbData,@m.pdwDataLen)
RETURN LEFT(m.pbData,m.pdwDataLen)





Странно, но это примерчик в такой конструкции не работает:
CREATE CURSOR tmpcrypt(pole1 c(50), Pole2 c(150), Pole3 c(50))

m.cpassword='123456'

APPEND BLANK
repl POLE1 with 'Test for Crypting'
Repl pole2 WITH wencrypt(pole1)
repl pole3 WITH wdecrypt(pole2)
BROW

То во что зашифровалось
IВ‘УтDБїѓ«ЏЯ±2OHa˜"q ¬‡eфwж4;F§ўьDеЧ[ЧQћ1lEg5о<‚®
И то что типа расшифровалось:
IВ‘УтDБїѓ«ЏЯ±2OHa˜"q ¬‡eфwж4;F§ўьDеЧ[ЧQћ1lE

Вот так работает...
APPEND BLANK
repl POLE1 with 'Test for Crypting'
Repl pole2 WITH wencrypt(pole1)
repl pole3 WITH wdecrypt( Alltrim (pole2))
BROW
...
Рейтинг: 0 / 0
05.02.2007, 16:25
    #34307020
pogodin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Конечно, ведь в (де)шифровании важен размер строки. Например для строки длиной 5 символов зашифрованный аналог занимает 8 символов и т.д. См. описание функций Api CryptEncrypt и CryptDecrypt.
...
Рейтинг: 0 / 0
05.02.2007, 16:33
    #34307049
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Еще учтите, что разные версии Windows шифруют данные по-разному...
...
Рейтинг: 0 / 0
05.02.2007, 21:47
    #34307772
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
если нужно текст зашифровать
то переставте кодовую и обнулите в ее заголовке
правда с цифрами не поможет
...
Рейтинг: 0 / 0
05.02.2007, 22:06
    #34307797
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
ПогодинЧерез win32api функции:

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=INPUTBOX('','Введите пароль','')

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

CREATE CURSOR tmpcrypt(pole1 c(10))
APPEND BLANK
BROWSE FIELDS pole1,pole2=wencrypt(pole1),pole3=wdecrypt(wencrypt(pole1))

CryptDestroyKey(m.hKey)
CryptDestroyHash(m.hHash)
CryptReleaseContext(m.hProv,0)
CLEAR DLLS
CLOSE ALL
*****************************
FUNCTION wencrypt && функция шифрования
PARAMETERS m.cstring
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)
RETURN m.pbData
*****************************
FUNCTION wdecrypt && функция дешифрования
PARAMETERS m.pbData
m.pdwDataLen=LEN(m.pbData)
CryptDecrypt(m.hKey,0,1,0,@m.pbData,@m.pdwDataLen)
RETURN LEFT(m.pbData,m.pdwDataLen)


Получается что это все Windows шифрует? Их использовать как функции?
...
Рейтинг: 0 / 0
06.02.2007, 09:24
    #34308129
Погодин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Да. В приведенном примере это функции wencrypt и wdecrypt. Их и используйте в программе. Я например, зная что мне нужно поле размером 5 символов делаю его размером 8 символов. В форме длину ввода ограничиваю 5 символами и записываю в поле значение введенной переменной как wencrypt(PADR(ALLTRIM(moyaperemennaya),5)). И т.д.
Что касается замечания "Еще учтите, что разные версии Windows шифруют данные по-разному..." то это зависит от выбранного провайдера. В примере это
m.pszProvider="Microsoft Base Cryptographic Provider v1.0".
Данный провайдер работает одинаково на всех OC начиная с Win95. Другие провайдеры, например "Microsoft Strong Cryptographic Provider", действительно работают по разному даже на машинах с WinXP и WinXP SP2. Как я понял, долго ковырявшись в интернете, это связано с длиной ключа при шифровании и законами США об экспорте технологий шифрования.
...
Рейтинг: 0 / 0
06.02.2007, 10:15
    #34308274
t03
t03
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Добрый день Погодин, Не подскажите смысл переменных
m.PROV_RSA_FULL=1
m.CRYPT_NEWKEYSET=8
m.CALG_MD5=32771
m.CALG_RC2=26114
Они могут меняться или это жесткие значения?
И еще не подскажите как проверить наличие на компе провайдера "Microsoft Base Cryptographic Provider v1.0"?
...
Рейтинг: 0 / 0
06.02.2007, 15:33
    #34309709
Погодин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закодировать DBF- файл?
Эти значения не могут меняться, они используются в Win32 Api. Их можно посмотреть, например в Visual Studio в файле "wincrypt.h".
Провайдер "Microsoft Base Cryptographic Provider v1.0" должен существовать всегда. Полный список провайдеров можно посмотреть в реестре по адресу HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider или просто поиском.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как закодировать DBF- файл? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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