1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141:
| procedure TForm1.Button3Click(Sender: TObject); var s,keystream:Tstream; part: longint; bloecke,i,rest:integer; buffer:array of byte; key:array of byte; begin if od.Execute then begin S:= TFileStream.Create(od.FileName, fmopenreadwrite); randomize; if s.Size<1024 then begin rest:=s.Size; part:=0; Progressbar2.Max:=rest; end else begin rest:=s.Size mod 1024; part:=s.Size div 1024; Progressbar2.Max:=1024; end; Progressbar1.Max:=part; Progressbar1.Position:=0; Progressbar2.Position:=0; setlength(key,1024); setlength(buffer,1024); if MessageBox(handle,pchar('Soll encodiert werden?'+#13+'(Zum decodieren "Nein" wählen!)'+#13+#13+'Hinweis:Die Files sollten nicht viel'+#13+'größer als 1mb sein!(Absturzgefahr)'),'Frage',36)=mrYes then begin showmessage('Key wird jetzt generiert!'); SD.Filter:='X-Crypt Keydatei (*.xck)|*.xck'; SD.DefaultExt:='.xck'; if SD.Execute then begin try keystream:=tfilestream.Create(sd.FileName,fmcreate); keystream.Seek(0,sofrombeginning); s.Seek(0,sofrombeginning); for bloecke:=0 to part do begin label2.Caption:=inttostr(s.Position); if (s.Size-s.Position)<1024 then begin reading(s,buffer,rest); s.Seek((-rest),s.Position); end else begin reading(s,buffer,1024); s.Seek(-1024,s.Position); end; for i:=0 to 1023 do begin application.ProcessMessages; key[i]:=random(254)+1; buffer[i]:=buffer[i] xor key[i]; progressbar2.Position:=i; sleep(0); if abbrechen=true then exit; end; if (s.Size-s.Position)<1024 then begin writing(keystream,key,rest); writing(s,buffer,rest); end else begin writing(keystream,key,1024); writing(s,buffer,1024); end; progressbar1.Position:=bloecke; end; finally keystream.free; s.Free; end; end else begin showmessage('Vorgang wird abgebrochen!'+#13+' Es macht keinen Sinn ohne die Schlüsseldatei!'); s.Free; exit; end; end else begin od.Filter:='X-Crypt Keydatei (*.xck)|*.xck'; showmessage('Key auswählen!'); if od.Execute then begin try keystream:=tfilestream.Create(od.FileName,fmopenreadwrite); if keystream.Size<>s.Size then begin showmessage('Achtung!Die Keydatei ist kleiner/größer als die Quelldatei!'); end; setlength(key,1024); setlength(buffer,1024); keystream.Seek(0,sofrombeginning); s.Seek(0,sofrombeginning); for bloecke:=0 to part do begin if s.Size-s.Position<1024 then begin reading(s,buffer,rest-1); reading(keystream,key,rest-1); s.Seek(-rest,s.Position); end else begin reading(s,buffer,1024); reading(keystream,key,1024); s.Seek(-1024,s.Position); end; for i:=0 to 1023 do begin application.ProcessMessages; buffer[i]:=buffer[i] xor key[i]; progressbar2.Position:=i; sleep(0); if abbrechen=true then exit; end; if s.Size-s.Position<1024 then writing(s,buffer,rest) else writing(s,buffer,1024); progressbar1.Position:=bloecke; end; finally keystream.free; s.Free; end; if MessageBox(handle,'Soll die Keydatei gelöscht werden?','Frage',36)=mrYes then deletefile(od.FileName); end; end; showmessage('Die Datei wurde ver/-entschlüsselt!'); progressbar1.Position:=0; progressbar2.Position:=0; end; end; |