Крипто-форум crprogram.16mb.com
http://crprogram.16mb.com/

Програми для шифрування файлів
http://crprogram.16mb.com/topic-t144.html
Сторінка 1 з 1

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Є декілька варіантів реалізації збереження файла:

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

І у будь-якому випадку існує проблема знищення копій вхідного файлу.
Щоб запобігти цьому використовують дискове шифрування.

Але так як наша мета тут побачити основи побудови програми для сучасних шифрів, то оберемо 2-й варіант.

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Програми для шифрування файлів

Програми для шифрування файлів

Це клас прогам, які призначені для шифрування файлів.
(тобто будь-яких даних, які збережені у файлі - зображення, фото, програми, текстові файли, документи та інше).

Тут розглянемо один з методів побудови інтерфейсу, та розглянемо приклад програми з використанням сучаних алгоритмів шифрування.

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Нам знадобиться:
форма,
2 кнопки - зашифрувати/розшифрувати
OpenDialog, SaveDialog - для відкритття та збережння файла відповідно.
Edit - для введення пароля.

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Отримаємо вигляд:
Зображення

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Для шифру XOR:
Код:
var
  Form1: TForm1;
  paa:array[0..32]of byte;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
tvxi,tvux:file of byte;
i:integer;
FS,d0:integer;
a,b:byte;
begin
d0:=length(edit1.text);
for i:=1 to d0 do
paa[i-1]:=ord(edit1.text[i]);

OpenDialog1.InitialDir:= ExtractFileDir(Application.ExeName);
if opendialog1.execute then
begin
  assignfile(tvxi,opendialog1.FileName);
  reset(tvxi);
  FS:=filesize(tvxi);
      if savedialog1.execute then
      begin
      assignfile(tvux,savedialog1.FileName);
      rewrite(tvux);
      for i:=1 to FS do
        begin
          read(tvxi,a);
          b:=a xor paa[i mod d0];
          write(tvux,b);
        end;
        closefile(tvxi);
        closefile(tvux);
end;
end;
end;


Пароль задається виразом
paa[i-1]:=ord(edit1.text[i]);

вхідний файл
assignfile(tvxi,opendialog1.FileName);

результат:
assignfile(tvux,savedialog1.FileName);

Зчитування-шифрування-запис:
Код:
 
          read(tvxi,a);
          b:=a xor paa[i mod d0];
          write(tvux,b);

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Для інших шифрів - наступного разу.
залишайтесь з нами... :)

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Далі реалізуємо один з режимів блочних шифрів.
Оберемо для прикладу режим CBC.

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Використаємо функції BlockRead, BlockWrite;

Наприклад, довжина блоку 64 біт, тоді можна реалізувати так:

Змінні:
Код:
var
  Form1: TForm1;
  paa:array[0..95]of byte;
  tvxi,tvux:file of byte;

implementation

{$R *.dfm}


Процедура шифрування:

де
bss:=7; - розмір блоку = 8 байт =64 біт.
FS:=filesize(tvxi) div SizeBuf; - кількість блоків.
BlockRead(tvxi, Buf, SizeBuf); - зчитування блоку з вхідного файла.

Код:
procedure cipherCBC();
var
Buf, Buf0: Array [0..7] Of byte;
i,j,SizeBuf:integer;
FS,d0,bss:integer;
begin
bss:=7;
SizeBuf:=SizeOf(Buf);

d0:=length(form1.edit1.text);
for i:=1 to d0 do
paa[i-1]:=ord(form1.edit1.text[i]);

for i:=0 to bss do
Buf0[i]:=255;
BlockWrite(tvux, Buf0, SizeBuf);


FS:=filesize(tvxi) div SizeBuf;

for i:=1 to FS do
begin
BlockRead(tvxi, Buf, SizeBuf);
for j:=0 to bss do
Buf[j]:=Buf[j] xor Buf0[j];

////////////////////////////поки що тут ксор
for j:=0 to bss do
Buf[j]:=Buf[j] xor paa[j];
////////////////////////////

BlockWrite(tvux, Buf, SizeBuf);

for j:=0 to bss do
Buf0[j]:=Buf[j];

end;
end;



І код для кнопки:
Код:

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
a,b:byte;
begin

OpenDialog1.InitialDir:= ExtractFileDir(Application.ExeName);
if opendialog1.execute then
begin
  assignfile(tvxi,opendialog1.FileName);
  reset(tvxi);
      if savedialog1.execute then
      begin
      assignfile(tvux,savedialog1.FileName);
      rewrite(tvux);

      cipherCBC();

      closefile(tvxi);
      closefile(tvux);
end;
end;
end;

end.

Так як наша мета зараз вивчити метод а не реалізувати "бойовий" шифр, то з вхідного файла відкинемо залишок.

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Далі перепишемо це все для сучасного шифру.

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

У темі DES реалізація шифрування файлів у режимі CBC.

Автор:  Artemyj [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Доброго дня! Можете підказати код програми на Object Pascal яка буде дишифровувати шифр CBC використовуючи введений ключ?

Автор:  Tariq [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

У темі ДЕС
des-t31.html
у самому низу - останнє повідомлення - там архів з такою програмою.

Автор:  Artemyj [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Дякую.

Автор:  darita [ 09 гру 2014, 20:48 ]
Заголовок повідомлення:  Re: Програми для шифрування файлів

Для інших шифрів - наступного разу.

Сторінка 1 з 1 Часовий пояс: UTC десь + 2 години
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/