Delphirus - прграммирование на delphi
   Все о delphi Delphirus - прграммирование на delphi
blocks.gif
Навигация
 

Главная
Статьи
Базы данных
Графика
Защита
Интернет
Система
Тексты
Мультимедиа
Файлы
Формы и окна
Другое
Советы
Базы данных
Графика
Интернет
Мультимедиа
Система
Тексты
Файлы
Файлы
Исходники
Компоненты
Инфо
Поиск по сайту
Обратная связь
Самое популярное
Аккаунт
Карта сайта

 
story.gif
Враг не прорвется!
 
Защита программ И кто из нас не сталкивался с желанием защитить свое творение от посягательств не верных? Уверен, что 90 человек из 100 ежедневно ломают голову над этим голову, разрабатывая хитрые алгоритмы шифрования столь ценной информации…

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

    Целью данной статьи является разработка такой системы защиты информации, которая бы не противоречила действующему законодательству, а заодно позволяла в некоторой мере обеспечить сохранность информации и заставить взломщика почувствовать себя не ловко.

Что и по чем?

    Итак! Обсудим наш проект, вернее то, как мы можем обезопасить себя от посягательств со стороны правительства..

    Ограничением, по сути, является длина ключа шифрования, т.е. того куска информации, которым мы будем «похабить» наше творение с целью сокрытия информации. Ограничение по длине ключа составляет 32-40бит, соответственно, если мы сделаем ключ меньше 32бит, то не попадем «под прицел», в то время, как сделай мы алгоритм шифрования скажем на 64бита, то мы станем чуть ли не международными террористами.

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

    К сожалению рамки данной статьи не позволяют в полном объеме рассмотреть данные алгоритмы, но желающие могут легко найти данную информацию в сети, или в печатных изданиях.

    Мы остановимся на синхронном шифровании поточного типа, с ключевым словом, длиной 12бит.

Легко и просто.

    Вот наконец-то мы добрались до того момента, когда в ход вступают не слова, а реальные примеры и реальные коды. Ниже будет приведен код программы, написанной мною для того, чтобы дать общее понятие о криптографии, текст снабжен исчерпывающими комментариями, так что понять думаю, будет очень легко и просто.

    Итак приступим.

unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ShellAPI;

const
  key = '2147483640'; // Наш ключик ?
  crname = 'crypt.fln'; // Шифрованый файлик
  dcrname = 'decrypt.fln'; // Востановленный (расшифрованый) файлик

type
  TForm1 = class(TForm)
  GroupBox1: TGroupBox;
  Button2: TButton;
  OpenDialog1: TOpenDialog;
  Button3: TButton;
  BitBtn1: TBitBtn;
  Edit1: TEdit;
  StaticText1: TStaticText;
  CheckBox1: TCheckBox;
  Label1: TLabel;
  GroupBox2: TGroupBox;
  Label2: TLabel;
  Label3: TLabel;
  Label4: TLabel;
  Label5: TLabel;
  Label6: TLabel;
  Label7: TLabel;
  Label8: TLabel;
  Label9: TLabel;
  Label11: TLabel;
  Label10: TLabel;
  Label12: TLabel;
  Button1: TButton;
  procedure Button3Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure BitBtn1Click(Sender: TObject);
  procedure Label11Click(Sender: TObject);
  procedure Label10Click(Sender: TObject);
  procedure Label12Click(Sender: TObject);
private
public
  { Public declarations }
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Crypt (FileName : TFileName); //Процедура шифрования
var
  f, f1 : File of Char; // Определяем переменные, в которых будут имена исходного и
                                              // зашифрованного файла
  j : Integer;
  i, i2 : Char;
begin
  AssignFile (f, FileName); // Сопоставляем имя исходного файла с переменной f
  AssignFile (f1, crname); // и имя итогового файла с переменной f1 типов Char
  try
  {$I-}
    Reset (f); // Пробуем открыть файл;
    Rewrite (f1); // и создать макет итогового файла
  {$I+}
  finally // В случае успеха
    While not Eof(f) do // Открываем цикл чтения файла побитно
    begin
      Read (f, i); // Считываем текущий символ
      j := Ord(i) xor StrToInt(key); // Берем ASCII код символа и проводим над ним и
                                                                    // ключевым словом операцию «исключающее ИЛИ
                                                                    // (XOR)»

      i2 := Chr(j); // Полученный результат преобразуем в символ
      Write (f1, i2); // и записываем в итоговый файл.
    end;
    CloseFile (f); // Закрываем исходный
    CloseFile (f1); // и итоговый файлы.
    Form1.Label1.Caption := 'Обработан';
    If Form1.CheckBox1.Checked <> True then DeleteFile (FileName);
  end;
end;

procedure Decrypt (FileName : TFileName); //Процедура дешифровки файла
var
  f, f1 : File of Char; // Опять объявляем переменные
  j : Integer;
  i, i2 : Char;
begin
  AssignFile (f, FileName); // Ассоциируем исходный (зашифрованный)
  AssignFile (f1, dcrname); // и итоговый (расшифрованный) файлы
  try
    {$I-}
    Reset (f); // Пробуем открыть
    Rewrite (f1); // Продуем создать
    {$I+}
  finally //Если корректно, то
    While not Eof(f) do // Открываем цикл чтения/записи
    begin
      Read (f, i); //Читаем символ
      i2 := Chr(Ord(i) xor StrToInt(key)); // Восстанавливаем символ
      Write (f1, i2); // и записываем его в выходной файл.
    end;
    CloseFile (f); // Закрываем исходный
    CloseFile (f1); // и итоговый (восстановленный) файлы
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Crypt (OpenDialog1.FileName);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  OpenDialog1.Execute;
  Edit1.Text := OpenDialog1.FileName;
  Label1.Caption := 'Новый';
  Button2.Enabled := True;
end;

end.

Эпилог.

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

!nVert0r

 
Разместил 06/02/2004 от rolcom ( Прочитано: )

  blocks.gif
Связанные ссылки
 

· Больше про Защита программ
· Новость от rolcom


Самая читаемая статья: Защита программ:
Защита программ от взлома

 
blocks.gif
Рейтинг статьи
 

Средняя оценка: 4.27
Ответов: 11


Пожалуйста, проголосуйте за эту статью:

Отлично
Очень хорошо
Хорошо
Нормально
Плохо


 
blocks.gif
опции
 


 Напечатать текущую страницу  Напечатать текущую страницу

 Отправить статью другу  Отправить статью другу

 
 

Page generation 0.057 seconds