Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Совмещение и кодирование файлов


Автор: PSYx 14.11.2005, 13:30
Привет, помогите решить проблемку:
Есть 2 разных файла со своими структурами. Нужно сна4ала объединить их(4то бы структура сохранилась- ведь потом их ещё разъединять придётся!) а затем закодировать(при4ём 4тобы при декоде структура живой осталась!). При4ём желательно 4тоб кодик не сильно мудрёный был!
Спасибо.

Автор: z-END 14.11.2005, 13:32
самый простой кодик: берем WinRAR создаем архив и паролируем его

Автор: PSYx 14.11.2005, 14:04
не прикалуйся! мне ж это програмно сделать надо!

Автор: _hunter 14.11.2005, 14:32
самый простой кодирование -- XOR-ом пройдись по всему буфферу
насчет объекдинения -- два ресурса создай...
+ вот:
http://forum.vingrad.ru/index.php?showtopic=70314

Автор: z-END 14.11.2005, 16:15
Цитата(PSYx @ 14.11.2005, 14:04)
не прикалуйся! мне ж это програмно сделать надо!

а я про что?! в DRKB есть пример как пользоваться библиотекой winRAR

Автор: ~FoX~ 15.11.2005, 10:16
Для использования библиотеки WinRar для архивирования - за нее нужно денежку отдать...

Автор: PSYx 15.11.2005, 10:17
Цитата(_hunter @ 14.11.2005, 14:32)
самый простой кодирование -- XOR-ом пройдись по всему буфферу
насчет объекдинения -- два ресурса создай...
+ вот:
http://forum.vingrad.ru/index.php?showtopic=70314

Спасибо, это уже ближе к теме!
Добавлено @ 10:18
Цитата(PSYx @ 15.11.2005, 10:17)
Цитата(_hunter @ 14.11.2005, 14:32)
самый простой кодирование -- XOR-ом пройдись по всему буфферу
насчет объекдинения -- два ресурса создай...
+ вот:
http://forum.vingrad.ru/index.php?showtopic=70314

Спасибо, это уже ближе к теме!

Да нет же - я СВОЙ код без дополнительных компонентов написать должен!
Добавлено @ 10:20
Цитата
Для использования библиотеки WinRar для архивирования - за нее нужно денежку отдать...

.. тем более, ведь прога, которую я пишу- не едини4ная(и не для ли4ного использования)! Юзать её будут все кому ни попади.

Автор: _hunter 15.11.2005, 11:40
тогда юзай банальный XOR. если слишком просто покажется -- иди в раздел алгоритмы и там про шифрование читай...

Автор: Snowy 15.11.2005, 12:47
Вот, нарисовал смешной xorный алгоритм:
Код

function Code(s: string):string;
var
  i: byte;
begin
  for i:=1 to Length(s) do
    if Length(s)-i+1 <> i then
      s[i]:=chr(ord(s[i]) xor ord(s[Length(s)-i+1]));
  result:=s;
end;

Юзается так:
Код

var
  s: string;
begin
  s:='Строка, которую ксорим';
  s:=Code(s); // закодировали
  // ...
  s:=Code(s);
  s:=Code(s); // Для декодирования, вызываем 2 раза  

Можно наоборот - для кодирования 2 раз, для декодирования 1.
Можно для кодирования 1 раз, для второго кодирования 1 раз, для декодирования еще раз.
Вобщем по данному алгоритму данные принимают свое первоначальное значение после третьего кодирования. (забавный эффект)...
Ну и сам алгоритм чуть посложнее для взлома, чем обычный xor.
Для большей надежности, можно к данным приклеивать рэндомный хвост. Тогда алгоритм станет вполне устойчивым, ибо хвост при кодировании влияет на кодируемое слово.

Автор: PSYx 15.11.2005, 13:07
не выйдет! я файлы кодирую, а Дэлфя при этом ( s[i]:=chr(ord(s[i]) xor ord(s[Length(s)-i+1]));) некоторые символы воспринимает как, скажем переход каретки. Этот метод я уже пробовал- не полу4ается так кодировать! Структура проги неизменно сбивается! smile

Автор: Snowy 15.11.2005, 13:36
Цитата(PSYx @ 15.11.2005, 13:07)
не выйдет! я файлы кодирую, а Дэлфя при этом ( s[i]:=chr(ord(s[i]) xor ord(s[Length(s)-i+1]));) некоторые символы воспринимает как, скажем переход каретки.

Все выйдет.
Читаешь через TFileStream в string.
string oтдаешь функции.
Затем обратно из стринга сохраняешь в стрим.
А стрингу все равно, что там в нем. Хоть каретки, хоть 0. Работает независимо от этого.
Это, если бы ты работал с TextFile, то да. А так все нормально.

Автор: PSYx 15.11.2005, 13:44
Дак в том то и дело 4то 4асть инфы в файлах- в текстовом виде!!!

Автор: Snowy 15.11.2005, 13:46
Вот код.
Код

var
  fs: TFileStream;
  s:  string;
begin
  fs:=TFileStream.Create('1.dat',fmOpenReadWrite);
  SetLength(s,fs.Size);
  fs.Position:=0;
  fs.Read(s[1],fs.Size);
  s:=Code(s);
  fs.Position:=0;
  fs.Write(s[1],Length(s));
  fs.Free;
end;

Для декодирования, соответственно s:=Code(s); вызвать 2 раза.
Или весь код 2 раза (но это дольше).
Добавлено @ 13:47
Цитата(PSYx @ 15.11.2005, 13:44)
Дак в том то и дело 4то 4асть инфы в файлах- в текстовом виде!!!

Да все равно. Работаем мы с байтами, а текст там или картинка - все равно.

Автор: PSYx 15.11.2005, 13:50
То4но? Ну ладно, СПАСИБО ща мостить в код на4ну!

Автор: Snowy 15.11.2005, 13:57
Кстати в данную схему можно еще добавить ZLib компрессию, а потом ее закодить.
Тогда вообще без дезассемблирования восстановить будет нереально.

Автор: PSYx 16.11.2005, 10:01
Гм, не, это - уже слишком, у меня таких требований проге нет. Спасибо, всё сработало как надо. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)