Автор | Сообщение |
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 26.03.09 19:30. Заголовок: Шифрование таблиц с помощью SIX
Здравствуйте всем! Пробую переводить Clipper-проект под Harbour, но столкнулся с двумя проблемами: 1. В дистрибутиве, который у меня есть нет библиотеки CODEPAGE.LIB, соответственно не могу нормально работать с русским языком 2. В Clipper'е применялось шифрование таблиц с помощью SIX. При просмотре этих талиц с помощью Harbour видны "карябушки". Есть ли надежда, что это мое неумение, или шифрование не совпадает?
|
|
|
Ответов - 7
[только новые]
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 26.03.09 20:14. Заголовок: Первый вопрос снят: ..
Первый вопрос снят: разобрался
|
|
|
|
| |
Пост N: 1165
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.03.09 22:29. Заголовок: Покажи код по 2 вопр..
Покажи код по 2 вопросу.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 27.03.09 08:16. Заголовок: У нас в проекте шифр..
У нас в проекте шифруются не все таблицы. Если таблица зашифрована, то она открывается с паролем, и потом в любом месте программы из нее извлекаются расшифрованные данные, а записываются в нее шифрованные. Harbour похоже работает не совсем так. Я еще не набрал достаточно статистики, но некоторые наблюдения есть: шифрованные таблицы показываются "карябушками", зато в нешифрованную таблицу вносятся закодированные записи. То есть что-то про шифрование Harbour все-таки знает. ********************************************* proc sdbfopen(mbase,malias,lshare,lReadOnly) ********************************************* // Открытие с проверкой на зашифрованность и переоткрытие в режиме // шифрования, если нужно local lopen:=.f. if dbfopen(mbase,malias,lshare,lReadOnly) if sx_TableType()=2 // Проверяем на зашифрованность. close(malias) sx_SetPass(SLPassWord(),1) if dbfopen(mbase,malias,lshare,lReadOnly) lopen:=.t. endif else lopen:=.t. endif endif return lopen
|
|
|
|
| постоянный участник
|
Пост N: 621
Зарегистрирован: 09.10.06
|
|
Отправлено: 27.03.09 08:46. Заголовок: Я не знаюпоможет эта информация или нет
Вопрос цитата: | Hi Przemek, I don't have SIX3, but I am reading the guides in http://www.ousob.com/ng/six3/index.php DBFdecrypt doesn't use a parameter as you said. As I can see I should use SetPass instead. But at least for me this code doesn't work, the table remains encrypted, sorry if I miss something: proc main() If !File("CLIENTS.DBF") DbCreate("CLIENTS", {{"NAME", "C", 40, 0}}) Use CLIENTS Append Blank CLIENTS->NAME := 'Ivanhoe' Close CLIENTS EndIf REQUEST SIXCDX Use CLIENTS Via "SIXCDX" NEW If sx_TableType() = 2 sx_SetPass("PASS") EndIf ? "NAME = "+CLIENTS->NAME // the second time it shows encrypted caracters If sx_TableType() = 1 ? "Table not encrypted, will be encrypted" sx_DBFencrypt("PASS") Else sx_DBFdecrypt() EndIf Close CLIENTS |
| Ответ цитата: | This code also does not work in SIX3 as you may expect because SX_SETPASS() does not reset the internal record buffer (IMHO it's a bug which should not be replicated) so after SX_SETPASS() you should add GBGOTO(RECNO()) to see the effect. And now we have an example which shows the problem: I forget to implement additional SX_SETPASS() actions and added only support for setting pending password in USE operation. I'll fix it in a while. Many thanks for example. Meanwhile use: dbInfo( DBOI_PASSWORD, "PASS" ) instead of: sx_SetPass( "PASS" ) as workaround. |
| И далее 2008-01-14 19:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) ! fixed problem with setting password for currently open table with SX_SETPASS( <cPass> ) т.е. можно использовать просто local lopen:=.f. if dbfopen(mbase,malias,lshare,lReadOnly) if sx_TableType()=2 // Проверяем на зашифрованность. sx_SetPass(SLPassWord(),1) endif lopen:=.t. endif return lopen И вопрос к вам, что вы используете Harbour или xHarbour и какую версию.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 27.03.09 09:20. Заголовок: Использую Harbour, с..
Использую Harbour, сборку от 17.09.08 По поводу включения пароля после открытия в Clipper'е у меня что-то не получалось. Переоткрытие было сделано после некоторых мучений. Но сейчас дело не в этом. Clipper шифрование применял только для той таблицы, которая была открыта с паролем, а Harbour почему-то пытается шифровать другие таблицы.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 27.03.09 10:09. Заголовок: Спасибо большое, Пет..
Спасибо большое, Петр! Все наладилось. Проблема в разных подходах Clipper'а и Harbour'а к шифрованию. В первом нужно сначала установить sx_SetPassSLPassWord(),1), а потом открывать таблицу, а в Harbour - наоборот.
|
|
|
|
| постоянный участник
|
Пост N: 622
Зарегистрирован: 09.10.06
|
|
Отправлено: 27.03.09 10:10. Заголовок: wad1 пишет: По пово..
wad1 пишет: цитата: | По поводу включения пароля после открытия в Clipper'е у меня что-то не получалось. |
| Так и не должно получаться - см.выше (IMHO it's a bug which should not be replicated) цитата: | а Harbour почему-то пытается шифровать другие таблицы. |
| Маленький пример (как в посте №4) сильно помог бы делу. Вот и хорошо. На счет разницы в подходах - во первых [x]Harbour is superset Clipper, т.е. имеет множественные (и весьма полезные) расширения, во вторых разработчики [x]Harbour не хотят воспроизводить глюки Clipper (a bug which should not be replicated) или 3d библиотек, и в третьих там и своих глюков достаточно и нужно вовремя сообщать о них разработчикам.
|
|
|
|