Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2010, 14:49   #1
kotzzz
Пользователь
 
Регистрация: 30.01.2009
Сообщений: 39
Радость Вопрос: Зашифровка текстовых файлов, используемых программой

Я написал программу-игру, типа тестера, нужно сделать так чтобы, через обычный текстовый редактор было не прочесть файлы базы... Сама база вопросов и ответов хранится в виде записей...

Нужно сделать так, чтобы через обычный редактор, файл отображал Иероглифы, ну неважно что... лишь бы ни те вопросы и ответы, которые используются в программе...

Вопрос: как это мне реализовать?! и можно ли это сделать для конкретных файлов, которые использует программа или шифруются - абсолютно все?!

(если можно поподробней) я только начинающий... Заранее, спасибо...
kotzzz вне форума Ответить с цитированием
Старый 13.01.2010, 15:06   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Инвентируй байты перед чтением и записью. Если записи текстовые, то просто делай перекодировку по другому положению букв - допустим а у Вас будет пробелом, с станет п и т.д.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.01.2010, 15:17   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) способов шифрования - огромное множество.
я бы, например, предложил Вам выполнять побайтную операцию XOR со строкой-ключом (используя эту строку циклически)
2) приведите пример, как Вы работаете с текстовым файлом (чтение/запись) - я напишу Вам КОНКРЕТНЫЙ пример кодирования.

3) в принципе, если задаться целью, что можно подключить библиотечки криптографии и тогда шифровать файл уже серьёзными алгоритмами (правда, в Вашем случае ключ всё равно прийдётся хранить в программе, поэтому, теоретически его оттуда можно достать)...
я бы Вам всё же рекомендовал остановиться на XOR
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2010, 15:25   #4
kotzzz
Пользователь
 
Регистрация: 30.01.2009
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Инвентируй байты перед чтением и записью. Если записи текстовые, то просто делай перекодировку по другому положению букв - допустим а у Вас будет пробелом, с станет п и т.д.
Это мне нужно к примеру использовать перечисляемый тип, ну например:
type alfafit= (А,Б,В..э,ю,я);

только я не могу понять как реализовать к примеру метод: разбили строку на символы, и теперь сравниваем с перечисляемым типом, находим его там и отсчитываем 5(или любой другой шаг) последующих символов и заменяем символ...
Н/р, было "А", шаг 5, стало "Е"...

Можно хотя бы пример кода замены, а дальше я сам... У меня при обучении именно с перечисляемым типом возникали проблемы...
kotzzz вне форума Ответить с цитированием
Старый 13.01.2010, 15:32   #5
kotzzz
Пользователь
 
Регистрация: 30.01.2009
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) способов шифрования - огромное множество.
я бы, например, предложил Вам выполнять побайтную операцию XOR со строкой-ключом (используя эту строку циклически)
2) приведите пример, как Вы работаете с текстовым файлом (чтение/запись) - я напишу Вам КОНКРЕТНЫЙ пример кодирования.

3) в принципе, если задаться целью, что можно подключить библиотечки криптографии и тогда шифровать файл уже серьёзными алгоритмами (правда, в Вашем случае ключ всё равно прийдётся хранить в программе, поэтому, теоретически его оттуда можно достать)...
я бы Вам всё же рекомендовал остановиться на XOR
Спс... но с XOR я пока не знаком, только начали Delphi осваивать, и большинство приходится самому рыскать...

Цитата:
var
key, text, longkey, result: string;
i: integer;
toto, c: char;
begin
for i := 0 to (length(text) div length(key)) do
longkey := longkey + key;
for i := 1 to length(text) do
begin
toto := chr((ord(text[i]) xor ord(longkey[i]))); // XOR алгоритм
result := result + toto;
end;
end;
вот пример нашел с xor, но принцип действия не пойму... и как потом вернуть истинное значение...

А пример чтения, записи(различие только в ключ. словах) наипростейший....

Цитата:
type TMedal = record
vopr:string[200];
otvet1:string[50];
otvet2:string[50];
otvet3:string[50];
otvet4:string[50];
end;
var
F: file of TMedal;
readd: TMedal;

begin
Path:='тырым-пырым';
assignFile(F,Path);
Reset(f);
read(f,readd);
closefile(f);
end;
потом я уже оперирую с записями readd...

Помогите пожалуйста... или с шаговым методом или с XOR...

Последний раз редактировалось kotzzz; 13.01.2010 в 15:49.
kotzzz вне форума Ответить с цитированием
Старый 13.01.2010, 18:12   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

метод XOR
операция XOR - обратима! Т.е.
ЗашифрованныйБайт := ИсходныйБайт XOR Ключ
затем
ИсходныйБайт := ЗашифрованныйБайт XOR Ключ

т.о. вызовете Вашу функцию для зашифрованного текста, получите расшифрованный! (хотя, реализация не очень эффективная - можно обойтись без longkey, но вроде бы рабочая!)


_____________________
метод замены одних букв на другие

для замены символом перечисляемый тип НЕ НУЖЕН!
достаточно иметь строку:
const Alfavit = ' АБВГДЕЖ...ЮЯабвг...эюя';
const NewAlfavit = 'ЯгДжУПроСцудЙфх...' строго такой же длины что и Alfavit!!!!
ОДИНАКОВЫХ СИМВОЛОВ в строках Alfavit и NewAlfavit НЕ ДОПУСКАЕТСЯ (потом не расшифруете!)
и код:
Код:
Str_Shifr :=  '';
for i:=1 to Length(Str_IShod) do begin
    Pos1 := Pos(Str_IShod[i], Alfavit );
    if Pos1 >0 then Str_Shifr := Str_Shifr + NewAlfavit[Pos1]
    else Str_Shifr := Str_Shifr + Str_IShod[i]
end;
строка Str_IShod - исходный текст, строка Str_Shifr - зашифрованный!

Последний раз редактировалось Serge_Bliznykov; 14.01.2010 в 02:29.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2010, 19:01   #7
kotzzz
Пользователь
 
Регистрация: 30.01.2009
Сообщений: 39
По умолчанию

Спасибо, за помощь и разъяснение... буду пробовать...
kotzzz вне форума Ответить с цитированием
Старый 13.01.2010, 22:06   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
Код:
const Alfavit = ' АБВГДЕЖ...ЮЯабвг...эюя';
const NewAlfavit = 'ЯгДужПроСцуЙфх...' строго такой же длины что и Alfavit!!!! 
ОДИНАКОВЫХ СИМВОЛОВ в строках Alfavit и NewAlfavit НЕ ДОПУСКАЕТСЯ (потом не расшифруете!)
Это, я так понимаю, недостаток метода XOR?
Не проще ли простую кодировку и раскодировку по следующему методу? :
При записи текста в файл - текст -> код символа + ключ (ключ как угодно динамический) = кодированный код;
При чтении с файла - кодированный код - ключ = код символа -> текст
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 13.01.2010, 22:20   #9
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вот когда то была подобная тема и кто то выложил dll с функцией шифрования и расшифровки :
Вложения
Тип файла: rar DLL Crypt.rar (2.3 Кб, 54 просмотров)
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 14.01.2010, 02:16   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от DeKot
Цитата:
const Alfavit = ' АБВГДЕЖ...ЮЯабвг...эюя';
const NewAlfavit = 'ЯгДужПроСцуЙфх...' строго такой же длины что и Alfavit!!!!
ОДИНАКОВЫХ СИМВОЛОВ в строках Alfavit и NewAlfavit НЕ ДОПУСКАЕТСЯ (потом не расшифруете!)
Это, я так понимаю, недостаток метода XOR?
я так и думал, что меня НЕВЕРНО поймут!
я описал ДВА разных метода шифрования.
то, что Вы процитировали, НИКАКОГО ОТНОШЕНИЯ К XOR НЕ ИМЕЕТ!
это просто пример реализации замен одних букв на другие, как предложил Utkin в пост #2

проще XOR'а уж ничего и быть не может. Алфавит задавать не надо, отдельные методы для шифрации/дешифрации делать не надо, стойкость (при достаточной длине и зашумленности строчки ключа) отличная!
именно поэтому я и рекомендую в простых случаях пользоваться методом шифрования через операцию XOR.

а в сложных случаях защиты — использовать специальные криптобиблиотеки, благо что есть много бесплатных!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка текстовых файлов Маринка777 Общие вопросы .NET 2 22.12.2009 17:37
Обработка текстовых файлов Frenki Помощь студентам 4 17.05.2009 14:52
Как построить автоматически взаимосвязь форм, используемых программой grenles Общие вопросы Delphi 1 14.01.2009 17:36
Сравнение текстовых файлов BR17UY Общие вопросы Delphi 15 07.05.2007 20:18