|
|
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Нельзя ли закодировать DBF- файл так, чтобы программа его читала и изменяла и программист мог его расшифровать, а для посторонних сделать его не доступным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2007, 15:57 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Можно. Делаешь функции шифрования/дешифрования для каждого типа данных. А дальше получил данные для записи=>зашифровал=>записал, прочитал=>расшифровал=>используешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2007, 16:47 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Только потом не удивляйся тормознутости программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2007, 17:07 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Через 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 11:03 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Можна. Только будут органичения. Возьми библиотеку "Гепард" -> http://www.planetsquires.com/cheetah.htm Это система построенная на dbf файлах, поддерживает все форматы фалов даных, использует кодирование и декодирование даных, индексов, мемо. Конечно есть ограничения. Индексы он использует свои. Занимает один DLL файл, примеры как использовать с разными языками программирования, можна посмотреть там же. Успехов. ---------------------- www.santysoft.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 11:29 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
ПогодинЧерез 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 14:08 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 14:11 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Конечно, ведь в (де)шифровании важен размер строки. Например для строки длиной 5 символов зашифрованный аналог занимает 8 символов и т.д. См. описание функций Api CryptEncrypt и CryptDecrypt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:25 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Еще учтите, что разные версии Windows шифруют данные по-разному... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:33 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
если нужно текст зашифровать то переставте кодовую и обнулите в ее заголовке правда с цифрами не поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 21:47 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
ПогодинЧерез 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 шифрует? Их использовать как функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 22:06 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Да. В приведенном примере это функции 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. Как я понял, долго ковырявшись в интернете, это связано с длиной ключа при шифровании и законами США об экспорте технологий шифрования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 09:24 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Добрый день Погодин, Не подскажите смысл переменных m.PROV_RSA_FULL=1 m.CRYPT_NEWKEYSET=8 m.CALG_MD5=32771 m.CALG_RC2=26114 Они могут меняться или это жесткие значения? И еще не подскажите как проверить наличие на компе провайдера "Microsoft Base Cryptographic Provider v1.0"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 10:15 |
|
||
|
Как закодировать DBF- файл?
|
|||
|---|---|---|---|
|
#18+
Эти значения не могут меняться, они используются в Win32 Api. Их можно посмотреть, например в Visual Studio в файле "wincrypt.h". Провайдер "Microsoft Base Cryptographic Provider v1.0" должен существовать всегда. Полный список провайдеров можно посмотреть в реестре по адресу HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider или просто поиском. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 15:33 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34308274&tid=1589934]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 213ms |
| total: | 393ms |

| 0 / 0 |
