Форум » [x]Harbour » Беда с функцией AfterATNUM() .... » Ответить

Беда с функцией AfterATNUM() ....

Andrey: Делал обработку текстового файла (в конце строки всегда стоит CHR(13)+CHR(10) ) Не могу получить первую строку функцией AfterATNUM() .... Результирующий файл различается от входящего ! Может как нибудь по другому можно ? Вот примерный текст программы: [more] FUNCTION MAIN() LOCAL nI, nLen, cSource, cTarget := "", cTemp cSource := FILESTR("User5.txt") nLen := NUMAT( CHR(13)+CHR(10), cSource ) ? " Kol-vo CHR(13)+CHR(10) = ",nLen FOR nI := 1 TO nLen ? nI cTemp := AfterATNUM( CHR(13)+CHR(10), cSource, nI ) ? cTemp,"-",LEN(cTemp) // ---- обработка строки ------ // cTemp := MyCRYPT(cTemp) cTarget := cTarget + cTemp + CHR(13)+CHR(10) NEXT STRFILE(cTarget,"User52.txt",.F.) WAIT RETURN NIL [/more]

Ответов - 52, стр: 1 2 3 All

Andrey: Ладно, буду делать рабочий тест. А там поглядим....

Vlad04: Еще вариант. Зашифрованный текст ( в данном случае разборка на строки не нужна) кодируем типа как почтовые программы. Или в цифры, как ниже: ( код на Паскале) function Koder(s: string): string; var i: integer; t: string; begin for i:=1 to Length(s) do begin t:=t+inttostr((ord(s[ i ])*2-100)*3)+' '; end; Result:=t; end; //****************************************************************** function Dekoder(s: string): string; var i,a: integer; t,z: string; begin z:=' '; a:=0; for i:=1 to Length(s) do begin if s[ i ]<>' ' then z:=z+s[ i ] else begin a:=strtoint(z); a:=round((a/3+100)/2); t:=t+chr(a); z:=' '; a:=0; end; end; Result:=t; end; Я в Делфях так делаю

gustow: Vlad04 пишет: t:=t+inttostr((ord(s)*2-100)*3)+' '; Влад, у тебя там, видимо, "ord(s[ i ])*2..." должно быть (судя по тому, что начиная со скобки после "s" в посте все идет курсивом). Обычная тут (в постах форума) ошибка (и у меня бывали) при наличии в коде работы с элементами массивов, где параметр цикла "i" (форумный движок воспринимает такое сочетание как тэг начала курсива)... Надо просто внутри "[ ]" ставить в начале и конце пробелы, тогда в посте все нормально выглядит (да и "предпросмотр" - вещь полезная :) особенно когда сюда копипастить кусок кода). Извиняюсь за "мелочные придирки" :) - просто иногда тяжело в большом куске кода бывает разобраться, просто скопипастив его из поста ("и чё оно не работает??.."), где потерялось "[ i ]".


Dima: gustow Поправил .

Dima: Andrey Не пробовал вместо HB_CRYPT , HB_UUEncode (HB_UUDecode) ?

Andrey: Dima пишет: Не пробовал вместо HB_CRYPT , HB_UUEncode (HB_UUDecode) ? Нет, не пробовал. Посмотрю конечно. Спасибо. Я понял, что Паша мне дал (ну заклинился на другом), сейчас это делаю ! Дошло наконец-то....

Andrey: ВОТ засада, то какая ! Если удалить хоть один байт с ТАКОГО файла (что Паша предложил), то раскодировать этот файл больше нельзя !!! И нафига такие заморочки с кодированием ? Есть ли другие способы ? Может заместо CHR(13)+CHR(10) взять разделитель типа [МояМетка] ? Вероятность того, что при шифрации строк может получиться такая комбинация - равна 0 !!!

Dima: Andrey пишет: Есть ли другие способы ? я же предлагал (на твоем примере не проверял). Dima пишет: Не пробовал вместо HB_CRYPT , HB_UUEncode (HB_UUDecode) ?

Pasha: Andrey пишет: ВОТ засада, то какая ! Если удалить хоть один байт с ТАКОГО файла (что Паша предложил), то раскодировать этот файл больше нельзя !!! И нафига такие заморочки с кодированием ? Есть ли другие способы ? Может заместо CHR(13)+CHR(10) взять разделитель типа [МояМетка] ? Вероятность того, что при шифрации строк может получиться такая комбинация - равна 0 !!! Чем больше символов содержит разделитель, тем меньше вероятность того, что он случайно будет содержаться в результате криптофункции. Так что это тоже вариант, хоть и не железный. А вариант с длиной строки - железобетонный Ж) А насчет удаления одного байта: надо тогда сформулировать, в чем заключается задача. Пользователь не должен видеть логи, но может захотеть их "испортить" ? Испортить файл с длиной строки и шифрованной строкой действительно можно удалением одного байта. Если шкодник захочет испортить файл с разделителем - он может стереть его содержимое. Помешать ему нельзя. Можно лишь фиксировать сам факт вмешательства - например, всегда дописывать в конец файла значение хэш, или, на худой конец, crc32

Dima: Pasha пишет: А насчет удаления одного байта: надо тогда сформулировать, в чем заключается задача +1

Andrey: Задача: Хочу в лог-файл добавлять данные, но чтоб пользователь не мог видеть и править их. Вариант удаления файла не рассматриваю, не важен пока. Если кто-то попортит файл, то хотелось бы вытащить оставшиеся данные. Т.е. шифрация всего файл-лога тоже не прокатывает, т.к. урезание нескольких байтов приведет к невозможности расшифровки всего остального файла. Вот и вся задача.

Dima: Andrey Ну прячь его где то подальше. Имя файлу придумай такое что бы ни ХТО не догадался ;) Как вариант можно лог в Zip архив запихать с паролем , правда тут придется подумать как лучше это сделать. Испортить зловред может ведь не только лог файл но и базу... PS Однако вумные юзеры у тебя.



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