Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Шифрование файла (https://forum.antichat.xyz/showthread.php?t=52843)

Ci5 05.11.2007 11:41

Шифрование файла
 
Есть обычный текстовый файл. Есть две программы:чтение файла и создание файла. Нужно чтобы одна программа умела шифровать что создала, а другая читать шифрованный файл.

Мне не нужен сложный алгоритм. Очень простенько. Просто еще ни разу с этим не связывался. Пишу на Delphi.

D0zz 05.11.2007 11:48

ну если очень просто и не надёжно, то можно по тупому xor'ить данные из файла с каким-то одному тебе известным ключом. А вообще если нужна надёжность лучше использовать готовые проверенные библиотеки и алгоритмы

Ci5 05.11.2007 11:54

Ну xor'ить это все понятно. Ну как будет выглядить пример шифрования файла хотябы через xor ?

ZAMUT 05.11.2007 12:46

Когда начинал изучать дельфина, все просто и понятно =) Если нужны комменты, могу написать.
Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls, jpeg, ExtCtrls, XPMan;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    MainMenu1: TMainMenu;
    Button2: TButton;
    N1: TMenuItem;
    N2: TMenuItem;
    N5: TMenuItem;
    CheckBox1: TCheckBox;
    ProgressBar1: TProgressBar;
    Edit3: TEdit;
    Edit4: TEdit;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    XPManifest1: TXPManifest;
    Label5: TLabel;
    Label7: TLabel;
    Label6: TLabel;
    procedure N5Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.N5Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 f:file of byte;
 f2,f3:textfile;
 i,k,n,k2,ll,l,th,g,razmer,peremen,keyl:integer;
 b:byte;
 s,key,keyp:string;
 p,sum:real;
begin
 g:=0;
 key:=Edit3.Text ;
 keyp:=Edit4.Text;
 if (key=keyp)and (Key<>'') then begin
 s:=Edit1.text;
 if s<>'' then begin
 key:=Edit3.Text ;
 keyp:=Edit4.Text;
 keyl:=length(key);
 k:=length(s);
 k2:=pos(s,'.');
 Delete(s,k2,3);
 s:=s+'.crpt';
 AssignFile(f,Edit1.text);
 AssignFile(f2,s );
 Reset(f);
 ReWrite(f2);
 razmer:=FileSize(f);
 ProgressBar1.Max:=razmer;
 peremen:=1;
 While not eof(f) do begin
  if g=2147483646 then g:=0;
  If peremen >= keyl then peremen:=1;
  Read(f,b);
  k:=ord(b);
  th:= k xor (  (ord(key[peremen])  + g));
  Write(f2,chr(th));
  ProgressBar1.StepBy(1);
  peremen:=peremen+1;
  g:=g+1;
 end;
  Edit2.text:=s;
  ShowMessage('Файл зашифрован');
  ProgressBar1.Position:=0;
  CloseFile(f);
  CloseFile(f2);
  if CheckBox1.Checked=true then Erase(f);
  CheckBox1.Checked:=false;
  Edit1.Text:='';
  Edit2.Text:='';
  Edit3.Text:='';
  Edit4.Text:='';
  OpenDialog1.FileName:='';
  end;
  end;
end;

procedure TForm1.N2Click(Sender: TObject);
var
s:string;
begin
OpenDialog1.Execute ;
s:=OpenDialog1.FileName ;
Edit1.Text:=s;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 SR:TSearchRec;
 a:TfileStream;
 q:byte;
 s,s2,s3,key,keyp:string;
 n,t,k,i,razmer,g,peremen,keyl:integer;
 f3:textfile;
 begin
 g:=0;
 s:=OpenDialog1.FileName ;
 s2:=Copy(s,k-4,5);
 if (s2<>'.crpt')and (s2<>'') then  ShowMessage('Не является зашифрованным файлом!') else begin
 key:=Edit3.Text ;
 keyp:=Edit4.text;
 if (key=keyp)and (key<>'') then begin
 if s<>'' then begin
 keyl:=length(key);
 a:=TfileStream.Create(s,fmOpenRead);
 s3:=s;
 razmer:=a.Size;
 ProgressBar1.Max:=razmer;
 k:=length(s);
 Delete(s,k-4,5);
 s2:=s;
 AssignFile(f3,s2);
 ReWrite(f3);
 peremen:=1;
  for i:=1 to razmer do begin
  if g=2147483646 then g:=0;
  If peremen >= keyl then peremen:=1;
  a.Read(q,1);
  t:= q xor (  (ord(key[peremen])  +g));
  a.Seek(0,1) ;
  Write(f3,chr(t));
  ProgressBar1.StepBy(1);
  peremen:=peremen+1;
  g:=g+1;
 end;
 CloseFile(f3);
 FileClose(0);
 a.Destroy;
 Edit2.text:=s;
 if CheckBox1.Checked=true then begin DeleteFile(OpenDialog1.FileName); end;
 CheckBox1.Checked:=false;
 ShowMessage('Файл расшифрован!');
 ProgressBar1.Position:=0;
 Edit1.Text:='';
 Edit2.Text:='';
 Edit3.Text:='';
 Edit4.Text:='';
 OpenDialog1.FileName;
end;
end;
end;
end;
end.

Подкорректирован код и ссылка на exe
Код:

http://depositfiles.com/files/2266774

ZAMUT 05.11.2007 13:39

У меня используется симметричный метод - гаммирование, с при помощи операции xor, ну и пара действий над входным ключом.

Ci5 05.11.2007 15:04

[x26]VOLAND, поподробней можна ?

spinedit1.value; - тут чем является ?


Время: 23:59