| Autor |
Beitrag |
Slowmo
      
Beiträge: 29
Suse Linux 10.1
Lazarus v.0.9.18
|
Verfasst: Do 19.01.06 19:02
Ich verzweifel hier bald ... ich möchte einen Stream als String auslesen, den String in ein Bitmap verschlüsseln, die Bitmap speichern, später wieder laden entschlüsseln und den String in einen Stream speichern, doch irgendwie will das nicht funktionieren. Hier mal der Quellcode:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure EncryptStream(Source, Dest: TStream; cl:Byte); var s: string; Buffer: TBitmap; begin SetLength(s, Source.size); Source.Read(pChar(s)^, Source.size); Buffer:=TBitmap.Create; Buffer:=Encrypt(s, cl); Buffer.SaveToStream(Dest); Buffer.Free; end;
procedure DecryptStream(Source, Dest: TStream; cl:Byte); var Buffer: TBitmap; s: String; begin Buffer:=Tbitmap.Create; Buffer.LoadFromStream(Source); s:=Decrypt(Buffer, cl); Buffer.Free; Dest.Write(s, length(s)); end; |
Die Verschlüssel- und Entschlüsselfunktionen funktioieren einwandfrei (getestet), es muss also an diesem Stück Quellcode liegen.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Do 19.01.06 19:13
Hast du es schon eimal ohne Zeigern probiert? Denn da liegt manchmal eine Fehlerquelle. Wenn man einfache Strings nimmt, muss man noch den Zeiger auf das erste Zeichen setzten (ich weiß nicht, ob dein Zeiger hier auf den 0 oder 1 Byte zeigt, da ja das 0 für die Länge reserviert ist).
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 19.01.06 19:27
Probier mal:
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:
| procedure EncryptStream(Source, Dest: TStream; cl:Byte); var s: string; Buffer: TBitmap; begin SetLength(s, Source.size); Source.Read(s[1], Source.size); Buffer:=Encrypt(s, cl); try Buffer.SaveToStream(Dest); finally Buffer.Free; end; end;
procedure DecryptStream(Source, Dest: TStream; cl:Byte); var Buffer: TBitmap; s: String; begin Buffer:=TBitmap.Create; try Buffer.LoadFromStream(Source); s:=Decrypt(Buffer, cl); finally Buffer.Free; end; Dest.Write(s[1], length(s)); end; |
Falls er bei s[1] meckert: Einfach ein @ davor ergänzen --> @s[1] ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Slowmo 
      
Beiträge: 29
Suse Linux 10.1
Lazarus v.0.9.18
|
Verfasst: Do 19.01.06 19:41
Also das hat leider nichts geändert, die beiden Stream sind am Ende immer nocht nicht die selben...
|
|
WASEO
      
Beiträge: 56
Win98, Win2000, WinXP
D6 Prof, D7 Prof
|
Verfasst: Do 19.01.06 19:43
Die Methode mit dem Buffer ist etwas umständlich. Wesentlich einfacher geht's mit TStringStream. Der hat die Eigenschaft DataString, in welcher der gesamte Stream als String abgelegt ist. Den Inhalt ann man dann leicht einem String zuweisen und ver- bzw. entschlüsseln und zu weiteren Zwecken verwenden.
Ansonsten schaumalguckeda:
www.swissdelphicente...showcode.php?id=1268
_________________ Erstaunlich sind nicht die Dinge, die wir nicht kennen, sondern die wir kennen und die nicht so sind.
|
|
Slowmo 
      
Beiträge: 29
Suse Linux 10.1
Lazarus v.0.9.18
|
Verfasst: Fr 20.01.06 18:17
Hat sich inzwischen erledigt, ich steig dabei zwar nich ganz durch, es muss aber am Speichern der Bitmap in einen Stream gelegen haben. Jetzt speicher ich die bitmap einfach in einer Datei und es funktioniert.
Trotzdem: Danke für die Hilfe.
|
|
|