Шифрование файла

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Ci5, 5 Nov 2007.

  1. Ci5

    Ci5 Elder - Старейшина

    Joined:
    10 Oct 2006
    Messages:
    141
    Likes Received:
    100
    Reputations:
    -1
    Есть обычный текстовый файл. Есть две программы:чтение файла и создание файла. Нужно чтобы одна программа умела шифровать что создала, а другая читать шифрованный файл.

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

    D0zz Member

    Joined:
    6 Sep 2006
    Messages:
    24
    Likes Received:
    7
    Reputations:
    0
    ну если очень просто и не надёжно, то можно по тупому xor'ить данные из файла с каким-то одному тебе известным ключом. А вообще если нужна надёжность лучше использовать готовые проверенные библиотеки и алгоритмы
     
    1 person likes this.
  3. Ci5

    Ci5 Elder - Старейшина

    Joined:
    10 Oct 2006
    Messages:
    141
    Likes Received:
    100
    Reputations:
    -1
    Ну xor'ить это все понятно. Ну как будет выглядить пример шифрования файла хотябы через xor ?
     
  4. Roba

    Roba Banned

    Joined:
    24 Oct 2007
    Messages:
    237
    Likes Received:
    299
    Reputations:
    165
    Когда начинал изучать дельфина, все просто и понятно =) Если нужны комменты, могу написать.
    Code:
    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
    Code:
    http://depositfiles.com/files/2266774
     
    #4 Roba, 5 Nov 2007
    Last edited: 5 Nov 2007
    2 people like this.
  5. Roba

    Roba Banned

    Joined:
    24 Oct 2007
    Messages:
    237
    Likes Received:
    299
    Reputations:
    165
    У меня используется симметричный метод - гаммирование, с при помощи операции xor, ну и пара действий над входным ключом.
     
  6. Ci5

    Ci5 Elder - Старейшина

    Joined:
    10 Oct 2006
    Messages:
    141
    Likes Received:
    100
    Reputations:
    -1
    [x26]VOLAND, поподробней можна ?

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