Autor Beitrag
huhn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 272
Erhaltene Danke: 1

WIN XP
D7Pers
BeitragVerfasst: Di 05.04.05 19:02 
Ich verstehnet warum immer ein stream read error kommt!
ausblenden volle Höhe Delphi-Quelltext
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:
procedure TForm1.Button3Click(Sender: TObject);
var  s,keystream:Tstream;
     part: longint;
     bloecke,i,j,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;    //1kb-blöcke!    entwicklung
        Progressbar2.Max:=1024;
      end;
    Progressbar1.Max:=part;
    Progressbar1.Position:=0;
    Progressbar2.Position:=0;
    setlength(key,1024);      //1kb
    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   //zum encodieren
      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);        //von anfang!
              s.Seek(0,sofrombeginning);
              for bloecke:=0 to part do
                begin
                  label2.Caption:=inttostr(s.Position);    //test
                  if (s.Size-s.Position)<1024 then reading(s,buffer,rest);//hier kommt immer der fehler!
                  else reading(s,buffer,1024);
                  for i:=0 to 1023 do
                    begin
                      application.ProcessMessages;
                      //if eof=true then break;
                      key[i]:=random(255);
                      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);
                      s.Seek((-rest),s.Position);
                      writing(s,buffer,rest);
                    end
                  else
                    begin
                      writing(keystream,key,1024);
                      s.Seek(-1024,s.Position);
                      writing(s,buffer,1024);
                      progressbar1.Position:=bloecke;
                    end;
                end;
              finally
                keystream.free;
                s.free;
              end;
          end
        else     //wenn key nicht gespeichert werden soll!
          begin
            showmessage('Vorgang wird abgebrochen!'+#13+' Es macht keinen Sinn ohne die Schlüsseldatei!');
            s.Free;
            exit;
          end;
      end
//....nicht wichtig!


Bin euch für jede hilfe dankbar :lol:
mfg huhn


Moderiert von user profile iconChristian S.: Topic aus Sonstiges verschoben am Di 05.04.2005 um 20:05

_________________
Quod Erat Demonstrandum-Was zu beweisen war! *THX to Chrissivo!*
huhn Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 272
Erhaltene Danke: 1

WIN XP
D7Pers
BeitragVerfasst: Di 05.04.05 20:10 
Also ich hab den ersten schritt hinbekommen,jetzt funtzt aber der 2 net mehr:
ausblenden volle Höhe Delphi-Quelltext
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); //mit kopierter dat weitermachen!
    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;    //1kb-blöcke!    entwicklung
        Progressbar2.Max:=1024;
      end;
    Progressbar1.Max:=part;
    Progressbar1.Position:=0;
    Progressbar2.Position:=0;
    setlength(key,1024);      //1kb
    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   //zum encodieren
      begin
        showmessage('Key wird jetzt generiert!');
        SD.Filter:='X-Crypt Keydatei (*.xck)|*.xck';          //ersetzt kompletten Vorgang!!
        SD.DefaultExt:='.xck';
        if SD.Execute then
          begin
            try
              keystream:=tfilestream.Create(sd.FileName,fmcreate);
              keystream.Seek(0,sofrombeginning);        //von anfang!
              s.Seek(0,sofrombeginning);
              for bloecke:=0 to part do
                begin
                  label2.Caption:=inttostr(s.Position);    //test
                  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;
                        //if eof=true then break;
                        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     //wenn key nicht gespeichert werden soll!
          begin
            showmessage('Vorgang wird abgebrochen!'+#13+' Es macht keinen Sinn ohne die Schlüsseldatei!');
            s.Free;
            exit;
          end;
      end
    else     //zum decodieren!Hier ist der 2.Teil
      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;

mfg huhn

//edit:sche**** funtzt beides net! :cry:

_________________
Quod Erat Demonstrandum-Was zu beweisen war! *THX to Chrissivo!*
huhn Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 272
Erhaltene Danke: 1

WIN XP
D7Pers
BeitragVerfasst: Mi 06.04.05 17:52 
Jungs hab meinen Fehler gefunden!
manchmal is man echt zu blöd die dh zu lesen :autsch: !

s.seek(count,origin);//des origin hab ich mit s.position gemacht-darf ich aber net!

hier auszug aus der DH(für origin):
ausblenden Quelltext
1:
2:
3:
soFromBeginning  Der Offset beginnt am Anfang der Ressource. Seek steuert die Position Offset an. Offset muss >= 0 sein.
soFromCurrent  Der Offset beginnt an der aktuellen Position in der Ressource. Seek steuert Position + Offset an.
soFromEnd  Der Offset beginnt am Ende der Ressource. Offset muss <= 0 sein, um die Anzahl der Bytes vor dem Dateiende anzugeben.

mfg huhn

_________________
Quod Erat Demonstrandum-Was zu beweisen war! *THX to Chrissivo!*