Шифрование и дешифрование
Шифрование и дешифрование
Шифрование и дешифрование Целью данной статьи является разработка такой системы защиты информации, которая бы не противоречила действующему законодательству, а заодно позволяла в некоторой мере обеспечить сохранность информации и заставить взломщика почувствовать себя неловко. 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. Эпилог. Данная статья и тем более данный алгоритм не претендуют на оригинальность, они призваны показать, что криптография не такая уж сложная штука. В настоящее время существует огромное количество различных форм шифрования и защиты информации, это и рассмотренное здесь шифрование ключом, и электронно-цифровая подпись, и хэш-функции: Перечислять можно до бесконечности, однако принцип один - искажение информации (порой даже необратимое). Эта наука представляет Вам обширное поле деятельности, главное помнить, то, что не нужно попадаться. Но я хочу тебя предупредить: в нашей стране, согласно указу № 334 от 1995 года, производить и распространять любые шифрующие средства можно, только имея лицензию ФАПСИ. Соответственно, шифровать нельзя :). Поэтому пиши программы только для личного пользования и только в познавательных целях