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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2009, 15:41   #1
Ramal
Пользователь
 
Аватар для Ramal
 
Регистрация: 13.07.2009
Сообщений: 15
Вопрос Как зашифровать текстовый файл на Делфи?

Всем привет!
Делаю небольшую программу Тест - Проверка знаний.Хочу признаться что исходник не мой,там все вопросы и ответы сохранены в текстовом файле.Вот и вопрос,как мне его зашифровать чтобы никто не смог увидеть ответы?
Программа почти что готова.

п.с это заказ клиента.Небольшие деньги но все же на сигаретку пивка и на дорогу хватит ребята помогите мне ...спасибо всем
Молитва программиста:Господи перезагрузи этот мир!
Ramal вне форума Ответить с цитированием
Старый 21.07.2009, 15:44   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Вот в виде библиотеки. Его можно от туда выдрать. Писал прогу похожую на твою и именно эту либу использовал. Либу писал сам.
Можно один раз пройтись. Можно два ))
Код:
library crypt;

uses
  SysUtils,
  Classes;

procedure CryptFile(const fileName: String); StdCall;
var
  fs: TFileStream;
  i, len: Longint;
  c1, c2: Byte;
begin
  try
    fs := TFileStream.Create(fileName, fmOpenReadWrite);
    len := fs.Size;
    for i := 0 to len - 2 do
    begin
      fs.Seek(i, soFromBeginning);
      fs.Read(c1, 1);
      fs.Seek(i+1, soFromBeginning);
      fs.Read(c2, 1);
      c1 := c1 + c2;
      fs.Seek(i, soFromBeginning);
      fs.Write(c1, 1);
    end;
    
    for i := 0 to len - 2 do
    begin
      fs.Seek(i, soFromBeginning);
      fs.Read(c1, 1);
      fs.Seek(i+1, soFromBeginning);
      fs.Read(c2, 1);
      c1 := c1 + c2;
      fs.Seek(i, soFromBeginning);
      fs.Write(c1, 1);
    end;
    fs.Free;    
  except
    fs.Free;
  end;
end;

procedure DeCryptFile(const fileName: String); StdCall;
var
  fs: TFileStream;
  i, len: Longint;
  c1, c2: Byte;
begin
  try
    fs := TFileStream.Create(fileName, fmOpenReadWrite);
    len := fs.Size - 1;
    for i := len downto 1 do
    begin
      fs.Seek(i, soFromBeginning);
      fs.Read(c1, 1);
      fs.Seek(i-1, soFromBeginning);
      fs.Read(c2, 1);
      c1 := c2 - c1;
      fs.Seek(i-1, soFromBeginning);
      fs.Write(c1, 1);
    end;

    for i := len downto 1 do
    begin
      fs.Seek(i, soFromBeginning);
      fs.Read(c1, 1);
      fs.Seek(i-1, soFromBeginning);
      fs.Read(c2, 1);
      c1 := c2 - c1;
      fs.Seek(i-1, soFromBeginning);
      fs.Write(c1, 1);
    end;
    fs.Free;
  except
  end;
end;

exports CryptFile index 10;
exports DeCryptFile index 20;

begin
end.
psycho-coder вне форума Ответить с цитированием
Старый 21.07.2009, 15:49   #3
Ramal
Пользователь
 
Аватар для Ramal
 
Регистрация: 13.07.2009
Сообщений: 15
По умолчанию

блин как мне этот форум нравиться !!! не прошло пол минуты и ответ уже готов) спасибо
Молитва программиста:Господи перезагрузи этот мир!
Ramal вне форума Ответить с цитированием
Старый 21.07.2009, 16:08   #4
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

psycho-coder, +1.
The Best вне форума Ответить с цитированием
Старый 21.07.2009, 16:29   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

То, что проблема решена, это отлично!

я просто хотел сказать... "я тебе один умный вещ скажу, только ты не обижайся"

1) в обычной жизни отлично себя рекомендует обычный xor При достаточной длинной строке ключа шифр получается вполне стойкий даже к частотному анализу и простым методам криптоанализа.
Так что - рекомендую!
Удобство XOR в том, что Символ xor Ключ = Зашифрованный Символ
а затем Зашифрованный Символ xor Ключ = Символ
Только не используйте в качестве ключа ОДИНОЧНЫЙ символ! Такой символ находится быстро!

2) есть отличные бесплатные библиотеки, которые обеспечат шифрацию, стандартными криптоалгоритмами (Rijndael (он же AES) , Blowfish и т.д.)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.07.2009, 16:36   #6
Ramal
Пользователь
 
Аватар для Ramal
 
Регистрация: 13.07.2009
Сообщений: 15
По умолчанию

Точно,об этом вчера я и читал,но все это мне показалось занудным. Как вы думаете для таких целей подходят готовые компоненты или все через библиотеки надо делать? я вообще в криптографии не разбираюсь,вот уже целый час сижу и разбираюсь исходником от psycho-coder ))
Молитва программиста:Господи перезагрузи этот мир!
Ramal вне форума Ответить с цитированием
Старый 21.07.2009, 16:38   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я дополню моего уважаемого коллегу, Сержа, сократив код до такого:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var s:string;

     function XORString(str:String; XORKey:byte):string;
var e:integer;
begin
 result:='';
    //********* FOR ******************
    for e :=1  to length(str) do
    begin
      result:=result+chr(byte(str[e]) xor XORKey);
    end;
    //******* END FOR ****************{}
end;

begin
 AssignFile(input,'file2.txt');reset(input);
 AssignFile(output,'file3.txt');rewrite(output);
  while not eof(input) do begin
   readln(s);
   write(XORString(s,200));
  end;
 CloseFile(output);
 CloseFile(input);
  { TODO -oUser -cConsole Main : Insert code here }
end.
Получишь непоганую шифровку. На основе этого можно навертеть механизм шифрования весьма сложный.
Цитата:
ак вы думаете для таких целей подходят готовые компоненты или все через библиотеки надо делать?
Значения не имеет. Важно каким механизмом шифровать. Ну для студней вот это подойдет
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.07.2009, 16:45   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А я дополню моего уважаемого коллегу, Сержа, сократив код до такого:
[CODE]program Project1;
...
То есть, если я правильно понял, то Ваш алгоритм с XOR, при первом проходе по файлу шифрует, а при втором расшифровывает его?
psycho-coder вне форума Ответить с цитированием
Старый 21.07.2009, 17:44   #9
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Можно ещё пройтись Base64(даже много раз).
Alter вне форума Ответить с цитированием
Старый 22.07.2009, 08:54   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при первом проходе по файлу шифрует, а при втором расшифровывает его?
Угадал. функций обратимых в математике мирриады. Я например раньше пользовался шифрованием SIN-TAN<->ArcTAN-ArcSIN. Тоже крутой шифр получался )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43
Как зашифровать EXE файл? AngelOfDeath Безопасность, Шифрование 1 09.04.2008 19:56
как определить в какой кодировке текстовый файл? PuzzleC Общие вопросы C/C++ 7 11.12.2007 13:52
Как конвертировать из екселя записи в текстовый файл? Askat Общие вопросы Delphi 6 02.07.2007 08:15
Как загрузить текстовый файл в Delphi? aidyn Помощь студентам 7 30.05.2007 20:56