| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Шифрование-дешифрование по словарю |
| Автор: Coderr 28.6.2006, 12:35 | ||
| Здрасте! Такая вещь: хочу, чтоб в моей программе файл настроек был зашифрован. Принцип такой: во время первого запуска проги создаётся алфавит, который представляет собой переставленные случайным образом символы таблицы ACSII, то есть что-то типа этого: 32 - - A 33 - ! - J 34 - " - G 35 - # - E 36 - $ - B Разъясню: номер символа в таблице ACSII... - ...и соответствующий ему символ - символ, выбранный случайным образом. Сделал прогу, вот что получилось:
но прога загружает проц на 100%, а доходит лишь максимум до номера 74 из таблицы символов! ПаМаГиТе! |
| Автор: Palladin 28.6.2006, 12:44 |
| У тебя очень много циклов, попробуй их укомпоновать, ща сам попробую если сделаю выложу здесь код твой |
| Автор: Coderr 28.6.2006, 20:42 | ||||
Не! Не так! алфавит создаётся один раз во время первого запуска только что установленной проги и записывается в файл! А в последующие разы дешифрация происходит по готовому словарю! Это делается для усложнения! =) У каждого разный словарь! Прикольно! =)))
Хорошо, уберу! =) |
| Автор: Coderr 28.6.2006, 20:58 | ||||
Mechanic, спасибо за идею! Теперь работает моментально! =) Если кому-нить понадобится, выкладываю код:
|
| Автор: Mailman 28.6.2006, 22:07 | ||
Хахаха. Народ, вы чот прошляпили! Ощшибка то была вот тут:
Заметьте, что b тут если сделалось false, то это бесконечный цикл. Потому и проблемы с циклом были )))) |
| Автор: Yanis 28.6.2006, 22:10 | ||
А файл с алфавитом как шифровать будешь? |
| Автор: Mechanic 29.6.2006, 02:16 | ||||||
Всё-таки предложил бы сохранять только Seed генератора, и восстанавливать каждый раз алфавит. Типа:
Только нужно учесть, что повторяемость последовательности Borland'ом не шибко гарантируется при переходе с версии на версию компилера (хотя, если всё происходит в пределах уже скомпиленного в одной версии exe, то вполне сойдёт):
И уж конечно же, убрать Randomize из самого цикла генерации алфавита.
|
| Автор: Coderr 30.6.2006, 20:54 | ||||||||||
| Лана!Это мелочи... Тут другая проблема нарисовалась! У моего файла настроек такая структура 1 строка: зашифрованный алфавит; 2 строка: путь к файлу(неважно какой =) ) 3 строка: 0 или 1 может быть (положение чекбокса) 4 строка: порт (у меня прога для работы с сетью...) Замучался короче! Начирикал пять процедур: Процедура №1, загружает настройки:
Процедура №2, сохраняет настройки:
Процедура №3, кодирование:
Процедура №4, декодирование:
Процедура №5, проебразование строки вида %PROGROOT%\Login.bbq(для эдита):
У меня уже голова кругом... Ошибки пачками вылетают... Одну исправлю-новая появляется... Помогите плз! Может есть способ пооригинальней загрузки\сохранения опций? |
| Автор: Palladin 2.7.2006, 01:54 |
| А где именно ошибки(на что компилятор указывает)??? |
| Автор: Coderr 2.7.2006, 21:18 | ||
| Ошибка raised exception class EStackOverflow with message 'Stack Overflow'. Переполнение буфера, однако... Вот процедура OnShow главной формы:
показывает на строку login:=TStringlist.Create; , то есть что-то не так в перечисленных выше процедурах... |
| Автор: Yanis 2.7.2006, 21:26 |
| Coderr Ты хотя бы номер строки скажи где ошибка выскакивает. И вообще, думаешь кому то охота копатся с такой громадой кода? Сначала ты хотел шифровать-дешифровать. А теперь (я посмотрел) какие то сокеты поперли... Добавлено @ 21:30 Во первых options:TStrings сделай как стринглист! Добавлено @ 21:35 Coderr А потрейсить никак? Попробуй, может узнаешь что-нибудь нового про свой код. |
| Автор: Coderr 2.7.2006, 21:37 |
| Строка номер 4, а с сокетами я сам разберусь! Они-то как раз и рабатають отлично! |
| Автор: Mechanic 2.7.2006, 22:04 | ||
Не буфера, но стека, однако.. И бывает такое, когда у тебя обработчики вызывают друг друга рекурсивно. Посмотри, что откуда вызывается, и когда пойдешь второй раз в одну функу до выхода из неё - вот это и место, где стак не выдерживает.. |