home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 February / Chip_2003-02_cd1.bin / ctenari / Hytha / HCrypt.exe / SR_KOP.RAR / SRC / Unit1.pas < prev    next >
Pascal/Delphi Source File  |  2002-10-31  |  23KB  |  846 lines

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, DCPcrypt2, DCPsha1, DCPtwofish, DCPtea, DCPserpent,
  8.   DCPrijndael, DCPrc6, DCPrc5, DCPrc4, DCPrc2, DCPmisty1, DCPmars, DCPidea,
  9.   DCPice, DCPdes, DCPblockciphers, DCPcast256, DCPcast128, DCPblowfish,
  10.   jpeg, ExtCtrls;
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     Button1: TButton;
  15.     DCP_blowfish1: TDCP_blowfish;
  16.     DCP_cast1281: TDCP_cast128;
  17.     DCP_cast2561: TDCP_cast256;
  18.     DCP_des1: TDCP_des;
  19.     DCP_3des1: TDCP_3des;
  20.     DCP_ice1: TDCP_ice;
  21.     DCP_thinice1: TDCP_thinice;
  22.     DCP_ice21: TDCP_ice2;
  23.     DCP_idea1: TDCP_idea;
  24.     DCP_mars1: TDCP_mars;
  25.     DCP_misty11: TDCP_misty1;
  26.     DCP_rc21: TDCP_rc2;
  27.     DCP_rc41: TDCP_rc4;
  28.     DCP_rc51: TDCP_rc5;
  29.     DCP_rc61: TDCP_rc6;
  30.     DCP_rijndael1: TDCP_rijndael;
  31.     DCP_serpent1: TDCP_serpent;
  32.     DCP_tea1: TDCP_tea;
  33.     DCP_twofish1: TDCP_twofish;
  34.     DCP_sha11: TDCP_sha1;
  35.     Edit1: TEdit;
  36.     Label1: TLabel;
  37.     Label2: TLabel;
  38.     Edit2: TEdit;
  39.     Edit3: TEdit;
  40.     Label3: TLabel;
  41.     Button2: TButton;
  42.     Button3: TButton;
  43.     Button4: TButton;
  44.     Button5: TButton;
  45.     Button6: TButton;
  46.     OpenDialog1: TOpenDialog;
  47.     OpenDialog2: TOpenDialog;
  48.     SaveDialog1: TSaveDialog;
  49.     Label4: TLabel;
  50.     Edit4: TEdit;
  51.     Button7: TButton;
  52.     SaveDialog2: TSaveDialog;
  53.     ListBox1: TListBox;
  54.     Button8: TButton;
  55.     Button9: TButton;
  56.     Button10: TButton;
  57.     Button11: TButton;
  58.     Button12: TButton;
  59.     Button13: TButton;
  60.     Button14: TButton;
  61.     Button15: TButton;
  62.     Button16: TButton;
  63.     Button17: TButton;
  64.     Button18: TButton;
  65.     Button19: TButton;
  66.     Button20: TButton;
  67.     Button21: TButton;
  68.     Button22: TButton;
  69.     Button23: TButton;
  70.     Button24: TButton;
  71.     Button25: TButton;
  72.     Button26: TButton;
  73.     Button27: TButton;
  74.     CheckBox1: TCheckBox;
  75.     CheckBox2: TCheckBox;
  76.     Edit5: TEdit;
  77.     Label5: TLabel;
  78.     Memo1: TMemo;
  79.     Button28: TButton;
  80.     Label6: TLabel;
  81.     CheckBox3: TCheckBox;
  82.     CheckBox4: TCheckBox;
  83.     Image1: TImage;
  84.     procedure Button1Click(Sender: TObject);
  85.     procedure Button2Click(Sender: TObject);
  86.     procedure Button5Click(Sender: TObject);
  87.     procedure Button4Click(Sender: TObject);
  88.     procedure Button3Click(Sender: TObject);
  89.     procedure Button6Click(Sender: TObject);
  90.     procedure Button7Click(Sender: TObject);
  91.     procedure Button27Click(Sender: TObject);
  92.     procedure Button8Click(Sender: TObject);
  93.     procedure Button26Click(Sender: TObject);
  94.     procedure Button9Click(Sender: TObject);
  95.     procedure Button10Click(Sender: TObject);
  96.     procedure Button11Click(Sender: TObject);
  97.     procedure Button12Click(Sender: TObject);
  98.     procedure Button13Click(Sender: TObject);
  99.     procedure Button14Click(Sender: TObject);
  100.     procedure Button15Click(Sender: TObject);
  101.     procedure Button16Click(Sender: TObject);
  102.     procedure Button17Click(Sender: TObject);
  103.     procedure Button18Click(Sender: TObject);
  104.     procedure Button19Click(Sender: TObject);
  105.     procedure Button20Click(Sender: TObject);
  106.     procedure Button21Click(Sender: TObject);
  107.     procedure Button22Click(Sender: TObject);
  108.     procedure Button23Click(Sender: TObject);
  109.     procedure Button24Click(Sender: TObject);
  110.     procedure Button25Click(Sender: TObject);
  111.     procedure FormCreate(Sender: TObject);
  112.     procedure CheckBox1Click(Sender: TObject);
  113.     procedure CheckBox2Click(Sender: TObject);
  114.     procedure Button28Click(Sender: TObject);
  115.     procedure CheckBox4Click(Sender: TObject);
  116.     procedure Edit1Change(Sender: TObject);
  117.     procedure Edit1Click(Sender: TObject);
  118.     procedure Edit2Change(Sender: TObject);
  119.     procedure Edit4Change(Sender: TObject);
  120.     procedure Edit3Change(Sender: TObject);
  121.   private
  122.     { Private declarations }
  123.   public
  124.     procedure CanCrypt;
  125.     procedure Ins(Co:String);
  126.     procedure MyRandomize;
  127.     function MyRandom:Byte;
  128.     { Public declarations }
  129.   end;
  130.  
  131.  
  132. const TempName='$$$FHC1$.TMP';
  133. type PSif=^TSif;
  134.      TSif=Record
  135.        Next:PSif;
  136.        N:Integer; // ╚φslo Üifry
  137.        KGen:Boolean; // Byl u₧ klφΦ generovßn / naΦten ?
  138.        Key:Array[0..1024]of Byte; // KlφΦ
  139.        Pass:Array[0..1024]of Byte; // Heslo
  140.      end;
  141.  
  142. const RNDL=1024;     
  143. var
  144.   Form1: TForm1;
  145.   CC:Array[0..17] of TDCP_BlockCipher;
  146.   Sifry,SPom,SPom2:PSif; // Seznam Üifer
  147.   Randomized:Boolean;
  148.   RBuf:Array[0..RNDL]of Byte;
  149.   RP:LongInt;
  150.  
  151. implementation
  152.  
  153. uses Unit2;
  154.  
  155. {$R *.dfm}
  156.  
  157.  
  158. procedure TForm1.MyRandomize;
  159. var I:LongInt;
  160. begin
  161.   Form2.Visible:=True;Form2.RePaint;
  162.   Form1.Visible:=False;
  163.  
  164.   RPL:=0;
  165.  
  166. //Application.MessageBox(PChar(IntToStr(RPL)),'',MB_OK);
  167.   repeat
  168.     Application.ProcessMessages;
  169.   until RPL>=RNDL;
  170. //Application.MessageBox(PChar(IntToStr(RPL)),'',MB_OK);
  171.  
  172.   for I:=0 to RNDL-1 do
  173.     RBuf[I]:=RBuf2[I];
  174.  
  175.   RPL:=0; 
  176.  
  177.   Form2.Visible:=False;
  178.   Form1.Visible:=True;
  179.  
  180.   RP:=0;
  181.   Randomized:=True;
  182. end;
  183.  
  184. function TForm1.MyRandom:Byte;
  185. begin
  186.  if not(Randomized)or(RP>RNDL) then Form1.MyRandomize; // Vygeneruj buffer nßhodn²ch Φφsel
  187.  MyRandom:=RBuf[RP];
  188.  RP:=RP+1;if (RP>RNDL) then Randomized:=False;
  189. end;
  190.  
  191. function SHA1(Co:String):String;
  192. Type HBuf=Array[0..1024] of Byte;
  193. var Pom:String;
  194.     H:HBuf;
  195.  
  196.   function HStr(B:HBuf;L:Word):String;
  197.   var Pom:String;
  198.       I:Word;
  199.   begin
  200.     Pom:='';
  201.     for I:=0 to ((L div 8)-1) do
  202.       Pom:=Pom+IntToHex(B[I],2);
  203.     HStr:=Pom;
  204.   end;
  205.  
  206. begin
  207.  with Form1.DCP_sha11 do begin
  208.    Init;
  209.    Update(Co[1],Length(Co));
  210.    Final(H);
  211.    Pom:=HStr(H,HashSize);
  212.  end;
  213.  SHA1:=Pom;
  214. end;
  215.  
  216.  
  217. procedure TForm1.CanCrypt;  // Povolit tlaΦφtka Crypt / Decrypt ?
  218. begin
  219.  Button5.Enabled:=True; // Crypt
  220.  Button6.Enabled:=True; // Decrypt
  221.  
  222.  if ListBox1.Count=0 then Button5.Enabled:=False;
  223.  if Length(Edit1.Text)=0 then Button5.Enabled:=False;
  224.  if Length(Edit2.Text)=0 then begin
  225.    Button5.Enabled:=False;
  226.    Button6.Enabled:=False;
  227.  end;
  228.  if Length(Edit4.Text)=0 then Button6.Enabled:=False;
  229.  if (CheckBox2.Checked)and(Length(Edit3.Text)=0) then begin
  230.    Button5.Enabled:=False;
  231.    Button6.Enabled:=False;
  232.  end;
  233. end;
  234.  
  235. procedure TForm1.Ins(Co:String);
  236. var I:LongInt;
  237. begin
  238.  for I:=ListBox1.Count-1 DownTo 0 do
  239.   if ListBox1.Selected[I] then break;
  240.  ListBox1.Items.Insert(I,Co);
  241.  CanCrypt;
  242. end;
  243.  
  244. procedure TForm1.Button1Click(Sender: TObject);
  245. begin
  246.  Form1.Close;
  247. end;
  248.  
  249. procedure TForm1.Button2Click(Sender: TObject);
  250. begin
  251.  if OpenDialog1.Execute then begin
  252.    Edit1.Text:=OpenDialog1.FileName;
  253.    Edit2.Text:=OpenDialog1.FileName+'.HCR';
  254.    Edit3.Text:=OpenDialog1.FileName+'.HCK';
  255.  end;
  256. end;
  257.  
  258. procedure TForm1.Button5Click(Sender: TObject);
  259. const LBuf=$F000;
  260.  
  261. var F3,F:File;
  262.     D:Array[0..LBuf] of Byte;
  263.     E1,E2,E3:Integer;
  264.     I:Word;
  265.     S1,S2:String;
  266.     X:LongInt;
  267.     H:Array[0..1024] of Byte;
  268.     Has:Record
  269.           Ci:Word;
  270.           Buf:Array[0..1023] of Byte;
  271.         end;
  272.  
  273.   procedure Sifruj(Sif:PSif;InF,OutF:String);
  274.   var D1,D2:Array[0..LBuf] of Byte;
  275.       F1,F2:File;
  276.       Key:Array[0..1024] of Byte;
  277.       I:Word;
  278.   begin
  279.     Memo1.Lines.Add('Crypt:   '+CC[Sif.N].Algorithm);
  280.     CC[Sif.N].CipherMode:=cmCFB8bit;
  281.   // Aktivuj klφΦ
  282.     for I:=0 to 1024 do Key[I]:=Sif.Key[I] xor Sif.Pass[I];
  283.     CC[Sif.N].Init(Key,CC[Sif.N].MaxKeySize div 8,nil);
  284.   // Otev°i soubory
  285.     AssignFile(F1,InF);
  286.     Reset(F1,1);
  287.     AssignFile(F2,OutF);
  288.     Rewrite(F2,1);
  289.   // Projφ₧d∞j soubory
  290.     while not eof(F1) do begin
  291.       for I:=0 to LBuf do begin
  292.         D1[I]:=0;
  293.         D2[I]:=0;
  294.       end;
  295.       BlockRead(F1,D1[0],LBuf,E1);
  296.       CC[Sif.N].EncryptCFB8bit(D1[0],D2[0],E1);
  297.       BlockWrite(F2,D2[0],E1,E2);
  298.     end;
  299.   // Zav°i soubory
  300.     CloseFile(F2);
  301.     CloseFile(F1);
  302.   // Sma₧ objekt Üifry
  303.     CC[Sif.N].Burn;
  304.   end;
  305.  
  306. begin
  307.   Memo1.Lines.Add('----- Crypt: -----');
  308.   Button1.Enabled:=False;
  309.   Button5.Enabled:=False;
  310.   Button6.Enabled:=False;
  311.  
  312.   if CheckBox2.Checked then begin // Pou₧ije se klφΦ ?
  313.     AssignFile(F3,Edit3.Text);
  314.     Rewrite(F3,1);
  315.   end;
  316.   for X:=ListBox1.Count-1 downto 0 do begin
  317.     New(SPom);
  318.     for I:=0 to 17 do if (ListBox1.Items.Strings[X]=CC[I].Algorithm) then break; // Detekce Üifry z °et∞zce
  319.       Spom^.N:=I;
  320.     Spom^.Next:=Sifry; // prvnφ Üifru dß na konec novΘ
  321.     Sifry:=SPom; // Prvnφ Üifru nastavφ tuhle
  322.     SPom^.KGen:=True; // KlφΦ u₧ byl generovßn
  323.     for I:=0 to 1024 do begin // Vymazat klφΦ i heslo
  324.       SPom^.Key[I]:=0;
  325.       SPom^.Pass[I]:=0;
  326.     end;
  327.     if CheckBox1.Checked then begin // Pou₧φvß se heslo ???
  328.       for I:=1 to Length(Edit5.Text) do // Nejd°φv heslo
  329.         SPom^.Pass[I-1]:=Ord(Edit5.Text[I]);
  330.       for I:=1 to Length(SHA1(Edit5.Text)) do // Pak SHA-1 hash hesla (kdyby heslo bylo delÜφ ne₧ max. dΘlka klφΦe)
  331.         SPom^.Pass[I-1]:=SPom^.Pass[I-1] xor Ord(SHA1(Edit5.Text)[I]);
  332.     end;
  333.     if CheckBox2.Checked then begin // Pou₧φvß se klφΦ ???
  334.       // (.....)
  335.       for I:=0 to ((CC[SPom^.N].MaxKeySize div 8)-1) do SPom^.Key[I]:=MyRandom; // Vygenerovat nßhodn∞
  336.       // (.....)
  337.       BlockWrite(F3,SPom^.N,2,E3); // ╚φslo Üifry (0-17)
  338.       BlockWrite(F3,SPom^.Key,1024,E3); // KlφΦ
  339.     end;
  340.   end;
  341.   if CheckBox2.Checked then CloseFile(F3); // Pou₧ije se klφΦ ?
  342.  
  343.  
  344.   // P°enΘst do temp. souboru
  345.   S1:=Edit1.Text;S2:=Edit2.Text;
  346.   AssignFile(F,S1);Reset(F,1);
  347.   AssignFile(F3,S2);Rewrite(F3,1);
  348.   while not eof(F) do begin
  349.     BlockRead(F,D,LBuf,E3);
  350.     BlockWrite(F3,D,E3,E1);
  351.   end;
  352.   CloseFile(F3);CloseFile(F);
  353.  
  354.   while Sifry<>nil do begin
  355.    if FileExists(TempName) then DeleteFile(TempName);
  356.       AssignFile(F,S2);Reset(F,1);
  357.       AssignFile(F3,TempName);Rewrite(F3,1);
  358.       while not eof(F) do begin
  359.         BlockRead(F,D,LBuf,E3);
  360.         BlockWrite(F3,D,E3,E1);
  361.       end;
  362.       CloseFile(F3);CloseFile(F);
  363.    if FileExists(S2) then DeleteFile(S2);
  364.    Sifruj(Sifry,TempName,S2);
  365.    SPom:=Sifry^.Next;
  366.    Dispose(Sifry);
  367.    Sifry:=SPom;
  368.    if FileExists(TempName) then DeleteFile(TempName);
  369.   end;
  370.  
  371. //// Hash
  372.     if CheckBox2.Checked then begin // Pou₧ije se klφΦ ?
  373.       Has.Ci:=100; // Init
  374.       for I:=0 to 1023 do Has.Buf[I]:=0;
  375.  
  376.       AssignFile(F3,Edit3.Text);
  377.       Reset(F3,1);
  378.         Form1.DCP_sha11.Init;
  379.         while not eof(F3) do begin
  380.           BlockRead(F3,D,LBuf,E3);
  381.           Form1.DCP_sha11.Update(D,E3);
  382.         end;
  383.         Form1.DCP_sha11.Final(H);
  384.         for I:=0 to (Form1.DCP_sha11.HashSize div 8)-1 do Has.Buf[I]:=H[I];
  385.       CloseFile(F3);
  386.  
  387.       AssignFile(F3,Edit2.Text);
  388.       Reset(F3,1);
  389.         Form1.DCP_sha11.Init;
  390.         while not eof(F3) do begin
  391.           BlockRead(F3,D,LBuf,E3);
  392.           Form1.DCP_sha11.Update(D,E3);
  393.         end;
  394.         Form1.DCP_sha11.Final(H);
  395.         for I:=0 to (Form1.DCP_sha11.HashSize div 8)-1 do Has.Buf[I+512]:=H[I];
  396.       CloseFile(F3);
  397.  
  398.       AssignFile(F3,Edit3.Text);
  399.       Reset(F3,1);
  400.       Seek(F3,FileSize(F3));
  401.       BlockWrite(F3,Has.Ci,2,E3);
  402.       BlockWrite(F3,Has.Buf,1024,E3);
  403.       CloseFile(F3);
  404. //// Hash(konec)
  405.  
  406.     end;
  407.  
  408.   Button1.Enabled:=True;
  409.   Button5.Enabled:=True;
  410.   Button6.Enabled:=True;
  411.   CanCrypt;
  412.   Memo1.Lines.Add(' ');  
  413. end;
  414.  
  415. procedure TForm1.Button4Click(Sender: TObject);
  416. begin
  417.  if OpenDialog2.Execute then Edit3.Text:=OpenDialog2.FileName;
  418. end;
  419.  
  420. procedure TForm1.Button3Click(Sender: TObject);
  421. begin
  422.  if SaveDialog1.Execute then begin
  423.    Edit2.Text:=SaveDialog1.FileName;
  424.    if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-3,4))='.HCR' then begin
  425.      Edit4.Text:=Copy(SaveDialog1.FileName,1,Length(SaveDialog1.FileName)-4);
  426.      Edit3.Text:=Copy(SaveDialog1.FileName,1,Length(SaveDialog1.FileName)-4)+'.HCK';
  427.    end;
  428.  end;
  429. end;
  430.  
  431. procedure TForm1.Button6Click(Sender: TObject);
  432. const LBuf=$F000;
  433.  
  434. var F3,F:File;
  435.     H:Array[0..1024] of Byte;
  436.     D:Array[0..LBuf] of Byte;
  437.     E1,E2,E3:Integer;
  438.     I:Word;
  439.     S1,S2:String;
  440.     L,X:LongInt;
  441.     HE1,HE2:Boolean;
  442.     Has,Has2:Record
  443.           Ci:Word;
  444.           Buf:Array[0..1023] of Byte;
  445.         end;    
  446.  
  447.   procedure Sifruj(Sif:PSif;InF,OutF:String);
  448.   var D1,D2:Array[0..LBuf] of Byte;
  449.       F1,F2:File;
  450.       Key:Array[0..1024] of Byte;
  451.       I:Word;
  452.   begin
  453.     if not(CheckBox3.Checked) then Memo1.Lines.Add('Decrypt: '+CC[Sif.N].Algorithm);
  454.     CC[Sif.N].CipherMode:=cmCFB8bit;
  455.   // Aktivuj klφΦ
  456.     for I:=0 to 1024 do Key[I]:=Sif.Key[I] xor Sif.Pass[I];
  457.     CC[Sif.N].Init(Key,CC[Sif.N].MaxKeySize div 8,nil);
  458.   // Otev°i soubory
  459.     AssignFile(F1,InF);
  460.     Reset(F1,1);
  461.     AssignFile(F2,OutF);
  462.     Rewrite(F2,1);
  463.   // Projφ₧d∞j soubory
  464.     while not eof(F1) do begin
  465.       for I:=0 to LBuf do begin
  466.         D1[I]:=0;
  467.         D2[I]:=0;
  468.       end;
  469.       BlockRead(F1,D1[0],LBuf,E1);
  470.       CC[Sif.N].DecryptCFB8bit(D1[0],D2[0],E1);
  471.       BlockWrite(F2,D2[0],E1,E2);
  472.     end;
  473.   // Zav°i soubory
  474.     CloseFile(F2);
  475.     CloseFile(F1);
  476.   // Sma₧ objekt Üifry
  477.     CC[Sif.N].Burn;
  478.   end;
  479.  
  480. begin
  481.   Memo1.Lines.Add('----- Decrypt: -----');
  482.   Button1.Enabled:=False;
  483.   Button5.Enabled:=False;
  484.   Button6.Enabled:=False;
  485.  
  486. if not(CheckBox2.Checked) then begin ////// NEPOUÄ═V┴ SE KL═╚
  487.   for X:=0 to ListBox1.Count-1 do begin
  488.     SPom:=Sifry; // Star² zaΦßtek schovß
  489.     New(Sifry);
  490.     for I:=0 to 17 do if (ListBox1.Items.Strings[X]=CC[I].Algorithm) then break; // Detekce Üifry z °et∞zce
  491.       Sifry^.N:=I;
  492.     Sifry^.Next:=SPom; // PokraΦuje star²mi Üiframi
  493.     Sifry^.KGen:=True; // KlφΦ u₧ byl generovßn
  494.     for I:=0 to 1024 do begin // Vymazat klφΦ i heslo
  495.       Sifry^.Key[I]:=0;
  496.       Sifry^.Pass[I]:=0;
  497.     end;
  498.     if CheckBox1.Checked then begin // Pou₧φvß se heslo ???
  499.       for I:=1 to Length(Edit5.Text) do // Nejd°φv heslo
  500.         Sifry^.Pass[I-1]:=Ord(Edit5.Text[I]);
  501.       for I:=1 to Length(SHA1(Edit5.Text)) do // Pak SHA-1 hash hesla (kdyby heslo bylo delÜφ ne₧ max. dΘlka klφΦe)
  502.         Sifry^.Pass[I-1]:=Sifry^.Pass[I-1] xor Ord(SHA1(Edit5.Text)[I]);
  503.     end;
  504.   end;
  505.   end else begin ////////////////////////// POUÄ═V┴ SE KL═╚
  506.  
  507. //// Hash
  508.       Has.Ci:=0; // Init
  509.       Has2.Ci:=0;
  510.       for I:=0 to 1023 do begin
  511.         Has.Buf[I]:=0;
  512.         Has2.Buf[I]:=0;
  513.       end;
  514.  
  515.       AssignFile(F3,Edit3.Text);
  516.       Reset(F3,1);
  517.         Form1.DCP_sha11.Init;
  518.         L:=0;
  519.         while L<(FileSize(F3)-1026) do begin
  520.           BlockRead(F3,D,1,E3);
  521.           L:=L+E3;
  522.           Form1.DCP_sha11.Update(D,E3);
  523.         end;
  524.         Form1.DCP_sha11.Final(H);
  525.         for I:=0 to (Form1.DCP_sha11.HashSize div 8)-1 do Has2.Buf[I]:=H[I];
  526.       CloseFile(F3);
  527.  
  528.       AssignFile(F3,Edit2.Text);
  529.       Reset(F3,1);
  530.         Form1.DCP_sha11.Init;
  531.         while not eof(F3) do begin
  532.           BlockRead(F3,D,LBuf,E3);
  533.           Form1.DCP_sha11.Update(D,E3);
  534.         end;
  535.         Form1.DCP_sha11.Final(H);
  536.         for I:=0 to (Form1.DCP_sha11.HashSize div 8)-1 do Has2.Buf[I+512]:=H[I];
  537.       CloseFile(F3);
  538. //// Hash(konec)
  539.  
  540.     AssignFile(F3,Edit3.Text);
  541.     Reset(F3,1);
  542.     while not Eof(F3) do begin
  543.       New(SPom);
  544.         BlockRead(F3,SPom^.N,2,E3); // ╚φslo Üifry (0-17)
  545.         BlockRead(F3,SPom^.Key,1024,E3); // KlφΦ
  546.  
  547.       if SPom^.N>=100 then begin
  548.         for I:=0 to 1023 do Has.Buf[I]:=SPom^.Key[I];
  549.         Has.Ci:=SPom^.N;
  550.         Dispose(SPom);
  551.         Continue;
  552.       end;
  553.  
  554.       if SPom^.N>17 then SPom^.N:=17; // Ochrana p°ed spadnutφm programu p°i ÜpatnΘm klφΦi 
  555.  
  556.       Spom^.Next:=nil; // DalÜφ Üifra u₧ nenφ
  557.       SPom^.KGen:=True; // KlφΦ u₧ byl generovßn
  558.  
  559.       SPom2:=Sifry;
  560.       if Sifry=nil then Sifry:=SPom else begin
  561.         while SPom2^.Next<>nil do SPom2:=SPom2^.Next;
  562.         SPom2^.Next:=SPom;
  563.       end;
  564.  
  565.       for I:=0 to 1024 do begin // Vymazat heslo
  566.         SPom^.Pass[I]:=0;
  567.       end;
  568.       if CheckBox1.Checked then begin // Pou₧φvß se heslo ???
  569.         for I:=1 to Length(Edit5.Text) do // Nejd°φv heslo
  570.           SPom^.Pass[I-1]:=Ord(Edit5.Text[I]);
  571.         for I:=1 to Length(SHA1(Edit5.Text)) do // Pak SHA-1 hash hesla (kdyby heslo bylo delÜφ ne₧ max. dΘlka klφΦe)
  572.           SPom^.Pass[I-1]:=SPom^.Pass[I-1] xor Ord(SHA1(Edit5.Text)[I]);
  573.       end;
  574.     end;
  575.     CloseFile(F3);
  576.  
  577.     HE1:=False;
  578.     HE2:=False;
  579.     for I:=0 to ((Form1.DCP_sha11.HashSize) div 8)-1 do begin
  580.       if Has.Buf[I]<>Has2.Buf[I] then HE1:=True;
  581.       if Has.Buf[512+I]<>Has2.Buf[512+I] then HE2:=True;
  582.  
  583. //Memo1.Lines.Add(IntToStr(Has.Buf[I])+' '+IntToStr(Has2.Buf[I]));
  584.     end;
  585.     if HE1 then begin
  586.       Memo1.Lines.Add('ERROR: Key file damaged !!!');
  587.       Application.MessageBox('ERROR: Key file damaged !!!','Error',MB_OK);
  588.     end else Memo1.Lines.Add('Key file OK');
  589.     if HE2 then begin
  590.       Memo1.Lines.Add('ERROR: Crypted file damaged !!!');
  591.       Application.MessageBox('ERROR: Crypted file damaged !!!','Error',MB_OK);
  592.     end else Memo1.Lines.Add('Crypted file OK');
  593.  
  594.   end; ///////////////////////////////////
  595.  
  596.   // P°enΘst do temp. souboru
  597.   S1:=Edit2.Text;S2:=Edit4.Text;
  598.   AssignFile(F,S1);Reset(F,1);
  599.   AssignFile(F3,S2);Rewrite(F3,1);
  600.   while not eof(F) do begin
  601.     BlockRead(F,D,LBuf,E3);
  602.     BlockWrite(F3,D,E3,E1);
  603.   end;
  604.   CloseFile(F3);CloseFile(F);
  605.  
  606.   while Sifry<>nil do begin
  607.    if FileExists(TempName) then DeleteFile(TempName);
  608.       AssignFile(F,S2);Reset(F,1);
  609.       AssignFile(F3,TempName);Rewrite(F3,1);
  610.       while not eof(F) do begin
  611.         BlockRead(F,D,LBuf,E3);
  612.         BlockWrite(F3,D,E3,E1);
  613.       end;
  614.       CloseFile(F3);CloseFile(F);
  615.    if FileExists(S2) then DeleteFile(S2);
  616.    Sifruj(Sifry,TempName,S2);
  617.    SPom:=Sifry^.Next;
  618.    Dispose(Sifry);
  619.    Sifry:=SPom;
  620.    if FileExists(TempName) then DeleteFile(TempName);
  621.   end;
  622.  
  623.   Button1.Enabled:=True;
  624.   Button5.Enabled:=True;
  625.   Button6.Enabled:=True;
  626.   CanCrypt;
  627.   Memo1.Lines.Add(' ');
  628. end;
  629.  
  630.  
  631. procedure TForm1.Button7Click(Sender: TObject);
  632. begin
  633.  if SaveDialog2.Execute then Edit4.Text:=SaveDialog2.FileName;
  634. end;
  635.  
  636. procedure TForm1.Button27Click(Sender: TObject);
  637. begin
  638.  ListBox1.Items.Clear;
  639.  CanCrypt; 
  640. end;
  641.  
  642. procedure TForm1.Button8Click(Sender: TObject);
  643. begin
  644.  Ins(CC[00].Algorithm);
  645. end;
  646.  
  647. procedure TForm1.Button26Click(Sender: TObject);
  648. var I:LongInt;
  649. begin
  650.  for I:=(ListBox1.Count-1) downto 0 do
  651.    if ListBox1.Selected[I] then ListBox1.Items.Delete(I);
  652.  CanCrypt;
  653. end;
  654.  
  655. procedure TForm1.Button9Click(Sender: TObject);
  656. begin
  657.  Ins(CC[01].Algorithm);
  658. end;
  659.  
  660. procedure TForm1.Button10Click(Sender: TObject);
  661. begin
  662.  Ins(CC[02].Algorithm);
  663. end;
  664.  
  665. procedure TForm1.Button11Click(Sender: TObject);
  666. begin
  667.  Ins(CC[03].Algorithm);
  668. end;
  669.  
  670. procedure TForm1.Button12Click(Sender: TObject);
  671. begin
  672.  Ins(CC[04].Algorithm);
  673. end;
  674.  
  675. procedure TForm1.Button13Click(Sender: TObject);
  676. begin
  677.  Ins(CC[05].Algorithm);
  678. end;
  679.  
  680. procedure TForm1.Button14Click(Sender: TObject);
  681. begin
  682.  Ins(CC[06].Algorithm);
  683. end;
  684.  
  685. procedure TForm1.Button15Click(Sender: TObject);
  686. begin
  687.  Ins(CC[07].Algorithm);
  688. end;
  689.  
  690. procedure TForm1.Button16Click(Sender: TObject);
  691. begin
  692.  Ins(CC[08].Algorithm);
  693. end;
  694.  
  695. procedure TForm1.Button17Click(Sender: TObject);
  696. begin
  697.  Ins(CC[09].Algorithm);
  698. end;
  699.  
  700. procedure TForm1.Button18Click(Sender: TObject);
  701. begin
  702.  Ins(CC[10].Algorithm);
  703. end;
  704.  
  705. procedure TForm1.Button19Click(Sender: TObject);
  706. begin
  707.  Ins(CC[11].Algorithm);
  708. end;
  709.  
  710. procedure TForm1.Button20Click(Sender: TObject);
  711. begin
  712.  Ins(CC[12].Algorithm);
  713. end;
  714.  
  715. procedure TForm1.Button21Click(Sender: TObject);
  716. begin
  717.  Ins(CC[13].Algorithm);
  718. end;
  719.  
  720. procedure TForm1.Button22Click(Sender: TObject);
  721. begin
  722.  Ins(CC[14].Algorithm);
  723. end;
  724.  
  725. procedure TForm1.Button23Click(Sender: TObject);
  726. begin
  727.  Ins(CC[15].Algorithm);
  728. end;
  729.  
  730. procedure TForm1.Button24Click(Sender: TObject);
  731. begin
  732.  Ins(CC[16].Algorithm);
  733. end;
  734.  
  735. procedure TForm1.Button25Click(Sender: TObject);
  736. begin
  737.  Ins(CC[17].Algorithm);
  738. end;
  739.  
  740. procedure TForm1.FormCreate(Sender: TObject);
  741. begin
  742.  Randomized:=False;
  743.  Sifry:=nil;
  744.  
  745.  CC[00]:=DCP_blowfish1;
  746.  CC[01]:=DCP_cast1281;
  747.  CC[02]:=DCP_cast2561;
  748.  CC[03]:=DCP_des1;
  749.  CC[04]:=DCP_3des1;
  750.  CC[05]:=DCP_ice1;
  751.  CC[06]:=DCP_thinice1;
  752.  CC[07]:=DCP_ice21;
  753.  CC[08]:=DCP_idea1;
  754.  CC[09]:=DCP_mars1;
  755.  CC[10]:=DCP_misty11;
  756.  CC[11]:=DCP_rc21;
  757.  CC[12]:=DCP_rc51;
  758.  CC[13]:=DCP_rc61;
  759.  CC[14]:=DCP_rijndael1;
  760.  CC[15]:=DCP_serpent1;
  761.  CC[16]:=DCP_tea1;
  762.  CC[17]:=DCP_twofish1;
  763.  
  764.  Button8 .Caption:=CC[00].Algorithm;
  765.  Button9 .Caption:=CC[01].Algorithm;
  766.  Button10.Caption:=CC[02].Algorithm;
  767.  Button11.Caption:=CC[03].Algorithm;
  768.  Button12.Caption:=CC[04].Algorithm;
  769.  Button13.Caption:=CC[05].Algorithm;
  770.  Button14.Caption:=CC[06].Algorithm;
  771.  Button15.Caption:=CC[07].Algorithm;
  772.  Button16.Caption:=CC[08].Algorithm;
  773.  Button17.Caption:=CC[09].Algorithm;
  774.  Button18.Caption:=CC[10].Algorithm;
  775.  Button19.Caption:=CC[11].Algorithm;
  776.  Button20.Caption:=CC[12].Algorithm;
  777.  Button21.Caption:=CC[13].Algorithm;
  778.  Button22.Caption:=CC[14].Algorithm;
  779.  Button23.Caption:=CC[15].Algorithm;
  780.  Button24.Caption:=CC[16].Algorithm;
  781.  Button25.Caption:=CC[17].Algorithm;
  782.  
  783.  Ins(CC[14].Algorithm);
  784.  Edit5.Enabled:=CheckBox1.Checked;
  785.   Label5.Enabled:=CheckBox1.Checked;
  786.   CheckBox4.Enabled:=CheckBox1.Checked;
  787.  Edit3.Enabled:=CheckBox2.Checked;
  788.   Label3.Enabled:=CheckBox2.Checked;
  789.   Button4.Enabled:=CheckBox2.Checked;
  790.  
  791.  CanCrypt; 
  792. end;
  793.  
  794. procedure TForm1.CheckBox1Click(Sender: TObject);
  795. begin
  796.  Edit5.Enabled:=CheckBox1.Checked;
  797.  Label5.Enabled:=CheckBox1.Checked;
  798.  CheckBox4.Enabled:=CheckBox1.Checked;
  799. end;
  800.  
  801. procedure TForm1.CheckBox2Click(Sender: TObject);
  802. begin
  803.  Edit3.Enabled:=CheckBox2.Checked;
  804.  Label3.Enabled:=CheckBox2.Checked;
  805.  Button4.Enabled:=CheckBox2.Checked;
  806.  CanCrypt;
  807. end;
  808.  
  809. procedure TForm1.Button28Click(Sender: TObject);
  810. begin
  811.  Memo1.Lines.Clear;
  812. end;
  813.  
  814. procedure TForm1.CheckBox4Click(Sender: TObject);
  815. begin
  816.  if CheckBox4.Checked then Edit5.PasswordChar:=#0 else
  817.                            Edit5.PasswordChar:='*';
  818. end;
  819.  
  820. procedure TForm1.Edit1Change(Sender: TObject);
  821. begin
  822.  CanCrypt;
  823. end;
  824.  
  825. procedure TForm1.Edit1Click(Sender: TObject);
  826. begin
  827.  CanCrypt;
  828. end;
  829.  
  830. procedure TForm1.Edit2Change(Sender: TObject);
  831. begin
  832.  CanCrypt;
  833. end;
  834.  
  835. procedure TForm1.Edit4Change(Sender: TObject);
  836. begin
  837.  CanCrypt;
  838. end;
  839.  
  840. procedure TForm1.Edit3Change(Sender: TObject);
  841. begin
  842.  CanCrypt;
  843. end;
  844.  
  845. end.
  846.