Laden...

CryptoStream - Can Not Seek

Erstellt von Lost-Ha(n)f-PHP vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.137 Views
Lost-Ha(n)f-PHP Themenstarter:in
58 Beiträge seit 2007
vor 16 Jahren
CryptoStream - Can Not Seek

Hallo Leute,

ich habe ein Problem mit meinem CryptoStream. Ich habe eine Datei erfolgreich verschlüsselt geschrieben ( Der inhalt sind serialisierte Objekte). Wenn ich diese Datei nun mit einem FileStream öffne und diesen Dann an einen CryptoStream übergebe, kann ich das Spielchen nicht auslesen, weil ich dort nicht die die Länge oder die Position auslesen kann ( bei Versuch -> Fehler).

Ich Deserialisiere meine Objekte, indem ich den Stream solange durchlaufe, bis er am Ende ist. Das geht aber nicht.

Was kann ich tun?

Nachtrag:
Ichh abe es geschafft ein Objekt zu deserialisieren. Das Problem ist jetzt noch, dass in der Datei x Objekte sein können. Ohne Den Crypt habe ich immer:


while(fs.Position < fs.Length)
{
    // ...Mein Code!
}

So werden alle Objekte deserialisiert.

Aber wie sieht das jetzt aus? Ich kann in diesem Stream die Position nicht abfragen...

Mit freundlichem Gruß

Lost-Ha[n]f-PHP

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Lost-Ha[n]f-PHP,

Länge und Position auslesen, klingt danach, dass du anschließen selber explizit Seek aufrufst. Das kannst du aber nur, wenn Stream.CanSeek der betroffenen Streems true liefert.

herbivore

Lost-Ha(n)f-PHP Themenstarter:in
58 Beiträge seit 2007
vor 16 Jahren

Nein das tue ich nicht, dass macht Deserialize(cryptoStream), so dass ich danach beim nächsten Aufruf der Funktion das nächste Objekt bekomme und nicht wieder das selbe.

Seek wird vom CryptoStream nicht unterstützt. Was kann ich da dann machen? Ich habe keine Möglichkeit zu erfahen, wo ich mich gerade in der Datei befinde.

Mit freundlichem Gruß

Lost-Ha[n]f-PHP

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Lost-Ha[n]f-PHP,

die Daten aus dem Crypostream vollständig (entschlüsselt) auslesen, in einem MemoryStream schreiben, diesen zurückspulen und diesen für die Deserialisierung verwenden.

herbivore

Lost-Ha(n)f-PHP Themenstarter:in
58 Beiträge seit 2007
vor 16 Jahren

Ok das könnte klappen, aber sehe ich das richtig, dass ich dann

aus FileStream einen CryptStream,
aus CryptStream einen StreamReader,
aus StreamReader ein Byte-Array und
aus Byte-Array einen MemoryStream

mache?

Geht das nicht einfacher?

Nachtrag:

Habe das mal ausprobiert: Das gibt beim Deserialize einen Fehler, der Stream ist dann unlesbar...

Mit freundlichem Gruß

Lost-Ha[n]f-PHP

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Lost-Ha[n]f-PHP,

den StreamReader brauchst du wohl nicht; der Rest ist m.E. erforderlich, wenn du (direkt oder indirekt) Seek brauchst. Wenn nicht geht es natürlich mit weniger Aufwand.

herbivore

Lost-Ha(n)f-PHP Themenstarter:in
58 Beiträge seit 2007
vor 16 Jahren

Ok. Ich habe das einfach so gelöst, dass ich beim Verschlüsseln die Anzahl der Objekte an den Anfang der Datei schreibe. Dann kann ich eine For-Schleife laufen lassen.

Trotzdem: Vielen Dank! ^^

Mit freundlichem Gruß

Lost-Ha[n]f-PHP