Форум » [x]Harbour » Шифрование таблиц с помощью SIX » Ответить

Шифрование таблиц с помощью SIX

wad1: Здравствуйте всем! Пробую переводить Clipper-проект под Harbour, но столкнулся с двумя проблемами: 1. В дистрибутиве, который у меня есть нет библиотеки CODEPAGE.LIB, соответственно не могу нормально работать с русским языком 2. В Clipper'е применялось шифрование таблиц с помощью SIX. При просмотре этих талиц с помощью Harbour видны "карябушки". Есть ли надежда, что это мое неумение, или шифрование не совпадает?

Ответов - 7

wad1: Первый вопрос снят: разобрался

Dima: Покажи код по 2 вопросу.

wad1: У нас в проекте шифруются не все таблицы. Если таблица зашифрована, то она открывается с паролем, и потом в любом месте программы из нее извлекаются расшифрованные данные, а записываются в нее шифрованные. 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


Петр: Вопрос 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 и какую версию.

wad1: Использую Harbour, сборку от 17.09.08 По поводу включения пароля после открытия в Clipper'е у меня что-то не получалось. Переоткрытие было сделано после некоторых мучений. Но сейчас дело не в этом. Clipper шифрование применял только для той таблицы, которая была открыта с паролем, а Harbour почему-то пытается шифровать другие таблицы.

wad1: Спасибо большое, Петр! Все наладилось. Проблема в разных подходах Clipper'а и Harbour'а к шифрованию. В первом нужно сначала установить sx_SetPassSLPassWord(),1), а потом открывать таблицу, а в Harbour - наоборот.

Петр: 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 библиотек, и в третьих там и своих глюков достаточно и нужно вовремя сообщать о них разработчикам.



полная версия страницы