| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Pascal/Delphi] Функция шифрования/дешифрования |
| Автор: Arhangel_76 20.9.2006, 22:12 |
| Люди, спасайте!!!! Горю!!!! Второй день пытаюсь зашифровать текс но ничего не выходит. Облазил все. И то что вы тут пишите тоже не помогает. Дело в том что есть на диске файл текстовый, и моя программа в него поле каждой сесссии ДОПИСЫВАЕТ текст. Шифрую непосредственно в проге, и дописываю уже шифрованный текст. Все бы хорошо, но когда пытаешься расшифровать, происходит что то странное. Либо только начальный кусок расшифровывается, а остальное - бяка кулибяка, либо при шифровании шифрует не всю строку, а тока чать. В общем ничего не могу сообразить, как надо. Сейчас вам код напишу как сохраняю в файл: procedure SaveToLog (Str:String); var f:TextFile; Filedir:String; windir: array[0..255] of char; begin GetWindowsDirectory(windir,255); Filedir:=windir+'\text.log'; assignFile(f, filedir); if not FileExists(Filedir) then begin Rewrite(f); CloseFile(f); end; Append(f); Write(f, str); //Writeln(f, str); //пробовал и так, результат тот же Flush(f); CloseFile(f); end; а вот и ваша функция, только она не расшифровывает потом все, а тока начало небольшое (может быть length() выдает неправильную длинну строки, а? ) function Crypt(CryptStr: string): string; var e : string; i : Integer; begin for i := 1 to length(CryptStr) do begin e[i] := chr(ord(CryptStr[i])+12); //тут можешь поставить любое число end; Result:=(e); end; НАПИШИТЕ НОРМАЛЬНЫЙ ПРИМЕР ПЛИЗЗ!!!!!!!!!!!! |
| Автор: Limpopo 20.9.2006, 22:22 |
| я бы помог если б смог |
| Автор: vinter 20.9.2006, 22:25 | ||
я могу на с++ выложить пойдет?? |
| Автор: Snowy 20.9.2006, 22:31 |
| Юзай этот код: http://forum.vingrad.ru/index.php?showtopic=14606&view=findpost&p=680266 Пропадут все проблемы. ЗЫ. А почему тема в центре помощи, а не в дельфи? |
| Автор: Sartorius 20.9.2006, 22:47 |
| Мдя... когда - то писал на паскале....помниться там в нулевом элементе строки - длина, а ты ее не выставляешь. |
| Автор: Snowy 20.9.2006, 22:56 |
| В дельфи запрещено обращение к нулевому элементу. Да и длина уже давно не там - в паскале длина строки укладывалась в 255 байт - один байт описывал длину. В дельфи строки до 2-х гигов. Длину одним байтом уже не пропишешь. Да и не так теперь всё просто - строки требуют динамическое выделение памяти. Выделять действительно нужно - через SetLength. Но шифрование сдвигом - не просто ненадёжное, но и чревато ошибками. |
| Автор: Sartorius 20.9.2006, 23:03 | ||||
Да я думаю Arhangel_76 под TP 5.0 - 7.0 пишет.
Если ты имеешь ввиду переполнение - то ИМХО оно тут не помешает, при вычитании к исходному символу вернемся, или еще какие-нить подводные камни есть? |
| Автор: Arhangel_76 21.9.2006, 11:51 |
| Конечно смотрел!!!!!!!!! Я и пример взял оттуда. НЕПОЛУЧАЕТСЯ!!!! Если шифровать только 1 текстовый файл (строку) то все нормально. Но если каждый раз к шифрованной строке дописывать еще (тоже предварительно зашифровав) то уже не поддается расшифровке, тока 1 часть расшифровывается. Вообще все как то странно. Если надо могу исходники выложить, чтоб было понятней Добавлено @ 12:03 Кто нибудь нормально код написать может? пишу я на Delphi7. От шифрования единственное что я хочу, это то чтобы открыв блокнотом файл мой с текстом, прочесть нельзя было его. И было бы непонятно что это вообще такое за абра кодабра. Понятно что если возьмут расшифровывать расшифруют еще и не такое. Я тут подумал, ведь Writeln(f, str); дописывает символ окончания строки а когда расшифровываем то length() как отпределяет конец строки? может до этого символа? оттого и все траблы? я вообще в инете нашел уже кода 3 или 4 шифрования. И все почемуто примерно одинаково ошибки дают в том как я их использую. При расшифровке. Может вообще нельзя к зашифрованному тексту дописывать, а?????? но я пробовал и по другому: перед тем как дописать, извлекал зашифрованный приедыдущий текст, расшифровывал, к нему прибавлял новый, зашифровывал все, и сохранял. Но всеравно ничего не помогало Скажите в чем дело?????????? |
| Автор: Arhangel_76 21.9.2006, 12:12 | ||||
Выкладывай на С++ Я найду тех кто переведет на паскаль, есть знакомые у меня. Но хоть что то дайте!!!! Горю, весь проект встал |
| Автор: Snowy 21.9.2006, 12:42 |
| Выкинь свою кривую функцию! Она не работает!!! Неужели так трудно вместо неё использовать то, что я дал? |
| Автор: vinter 21.9.2006, 13:58 | ||
|
| Автор: Arhangel_76 21.9.2006, 14:04 |
| Snowy, то что ты дал, помоему вообще некомпилируемо на дельфи. Покрайне мере не для моего ума. Я все скопировал, функции их обявления. Там вообще Дельфи орет что все не так. Какието ошибки вылетают что "ожидалось an indetifer а найдено =" и ожидалось : а найдено = Конечно я сомневаюсь что кто то из модераторов может так коряво писать, но темнееменее я перенести это к себе в прогу немогу В отличии от "кривой" функции, которая хоть как то работает P.S. что же будет тогда дальше? когда мне понадобится зашифрованный файл упаковать еще и в Zip |
| Автор: Snowy 21.9.2006, 15:55 |
| Arhangel_76, ты вынуждаешь меня делать за себя свою работу Уже ведь всё разжевал и в рот положил. Это элементарно, Ватсон! Держи. |