![]() |
Entschlüsselungs-Probleme mit DEC
Ich arbeite gerade an einem kleinen Programm um Daten zu verschlüsslen.
Unverschlüsselt sieht das ganze ungefähr so aus: Benutzername,LoginDaten,FreigegebeneOrdnerstrucktu r,Passwort Benutzername,LoginDaten,FreigegebeneOrdnerstrucktu r,Passwort Benutzername,LoginDaten,FreigegebeneOrdnerstrucktu r,Passwort Benutzername,LoginDaten,FreigegebeneOrdnerstrucktu r,Passwort Benutzername,LoginDaten,FreigegebeneOrdnerstrucktu r,Passwort Benutzername,LoginDaten,FreigegebeneOrdnerstrucktu r,Passwort Benutzername,LoginDaten,FreigegebeneOrdnerstrucktu r,Passwort ... etc ... Zur Zeit benutze ich folgenden Code:
Delphi-Quellcode:
Ich verschlüssele jede Zeile, die in einer listbox steht einzeln und füge sie danach einer anderen listbox hinzu.
const
DefCipherClass: TCipherClass = TCipher_Rijndael; //mögliche siehe Cipher.pas und Cipher1.pas CipherMode = cmCBC; // Cipher-Mode: cmCTS, cmCBC, cmCFB, cmOFB, cmECB procedure TFRM_Main.Button4Click(Sender: TObject); begin with DefCipherClass.Create('', nil) do // Verschlüsseln begin try Mode := CipherMode; InitKey('password',nil); Edit3.Text := EncodeString(Edit2.text); finally Free; end; end; end; procedure TFRM_Main.Button5Click(Sender: TObject); begin with DefCipherClass.Create('', nil) do // Entschlüsseln begin try Mode := CipherMode; InitKey('password',nil); Edit4.Text := DecodeString(Edit3.text); finally Free; end; end; end; Verschlüsseln und Entschlüsseln funktioniert im Programm so wie es soll. Nun kommen wir zum Problem: Ich speichere die verschlüsselte Liste als Datei ab. Durch die Verschlüsselung enthält diese nun Sonderzeichen. Beim Laden der Datei, um sie wieder zu entschlüsseln passiert öfter folgendes. Das Sonderzeichen für Zeilenumbruch macht mir einen Strich durch die Rechnung! Somit fügt das Programm einen Teil der Zeile in eine zweite Zeile ein. Somit habe ich mehre Zeilen als zuvor und kann den Text nicht mehr entschlüsseln. Es fehlt zum einen das Sonderzeichen für den Zeilenumbruch und zum anderen ist die Zeile nicht mehr komplett in einer. Mein erste Ansatz ist nun das Sonderzeichen durch ein Doppelzeichen wie ## zu ersetzen. Anscheiend gibt es mehrere Sonderzeichen, die einen Zeilenumbruch in einer Listbox hervorrufen. Somit müsste ich alle ersetzen bzw. einen anderen Weg finden, die Zeilen 1:1 wieder einzulesen. Wenn ich die verschlüsselte Liste im Notepad öffen bleiben die Zeilen wie sie sollen. Sobald ich die Datei in eine Listbox einlese passiert mir die Sache mit den Zeilenumbrüchen. Kann einer von Euch mir einen Tip geben? |
Re: Entschlüsselungs-Probleme mit DEC
Hab weiter im Board gelesen.
Folgenden Code hab ich ohne Erfolg zum Einlesen der Datei probiert:
Delphi-Quellcode:
Anscheinend wird die Datei nicht zeilenweise eingelesen bzw die Sonderzeichen verursachen immernoch den Zeilenumbruch ...
procedure TForm1.Button7Click(Sender: TObject);
var Datei: Textfile; Temp: String; begin AssignFile(Datei,edit11.text); Reset(Datei); while (not Eof(Datei)) do begin Readln(Datei, Temp); ListBox1.Items.Add(Temp); end; Closefile(Datei); end; danach hab ich listbox2.savetofile(edit11.text); in ...
Delphi-Quellcode:
... geändert, aber ohne Erfolg. Anscheinend liegt es am Einlesen ...
var
Datei: Textfile; Temp: String; i: integer; begin AssignFile(Datei, edit11.text); ReWrite(Datei); //öffnet die Datei zum Schreiben for i := 0 to ListBox2.Count-1 do begin WriteLn(Datei, Listbox2.items[i]); end; //schreibt noch eine Zeile CloseFile(Datei); //schließt die Datei Nun hab ich was probiert: Nur in der Listbox bleibt die Editzeile in eine Zeile gespeichert. Hier mal die ganze Vorgehensweise von mir. Ich hab eine Listbox1 wo die Datenliste unverschlüsselt vorliegt. Mit dem Code im ersten Post verschlüssele und entschlüssele ich die erste Zeile. Falls das geklappt hat, füge ich die verschlüsselte Zeile der Listbox2 hinzu. Dies wiederhole ich solange bis alle Listbox1.items verschlüsselt in Listbox2 vorliegen. Listbox2 speichere ich dann. Ich habs mit savefileto und assignfile probiert. Wenn ich die Datei im Windows-Editor öffene wird die Datei ordnungsgemäß ausgelesen. Wenn ich die gleiche Datei in Wordpad öffne kommt der Zeilenumbruch zustande. Somit wird die Datei in die Listbox2 wie bei Wordpad eingelesen und nicht wie in Notepad. Gibt es eine Möglichkeit die Datei wie bei Notepad einzulesen und dann Zeilenweise in die Listbox2 einzufügen, da ich ja die Listbox2 wieder zeilenweise entschlüssele. ... es kann auch sein, das das zeilenweise ver/entschlüsseln garnicht geht und ich mich total auf dem Holzweg befinde ... |
Re: Entschlüsselungs-Probleme mit DEC
Hai Amnon82,
Du könntest einen anderen Weg gehen. Du lädst den unverschlüsselten Text in deine Listbox. Dann schreibst Du diesen in einen TStream. Diesen kanns Du nun mit EncodeStream verschlüseln und speichern. Beim entschlüsseln machst Du es genau anders herum: Die Datei in einen Stream laden, diesen entschlüsseln und dann in eine Listbox schreiben. |
Re: Entschlüsselungs-Probleme mit DEC
Fisch Sharky,
kannst Du mir ein Beispielcode posten, da ich das mit Streams noch nicht gemacht habe? Bis jetzt hab ich es temporär so gelöst: Ich verschlüssele die Zeile und ersetze alle Sonderzeichen #13 und #10 mit ## bzw. **. edit2.text:=StringReplace(edit2.text, #13, '##', [rfReplaceAll]); edit2.text:=StringReplace(edit2.text, #10, '**', [rfReplaceAll]); listbox2.Items.add(edit2.text); Entschlüsseln dann so: edit2.text:=StringReplace(edit2.text, '**', #10, [rfReplaceAll]); edit2.text:=StringReplace(edit2.text, '##', #13, [rfReplaceAll]); listbox1.Items.add(edit2.text); ... wobei das mit dem Steam die Lösung währe. |
Re: Entschlüsselungs-Probleme mit DEC
Da der Code ganz oben ja auch von mir ist ;-)
Delphi-Quellcode:
uses
Cipher1, Cipher, DECUtil; const DefCipherClass: TCipherClass = TCipher_Rijndael; CipherMode = cmCBC; // Cipher-Mode: cmCTS, cmCBC, cmCFB, cmOFB, cmECB procedure TForm1.Button1Click(Sender: TObject); var decStream: TMemoryStream; encStream: TMemoryStream; begin ListBox1.Items.LoadFromFile('c:\test.txt'); // Datei laden decStream := TMemoryStream.Create; // TStream für den Text erzeugen encStream := TMemoryStream.Create; // Stream für die Verschlüsselung try ListBox1.Items.SaveToStream(decStream); // Text in Stream speichern decStream.Position := 0; // Stream auf den Anfang setzen with DefCipherClass.Create('', nil) do // Verschlüsseln begin try Mode := CipherMode; InitKey('password', nil); EncodeStream(decStream, encStream, decStream.Size); // Stream verschlüsseln encStream.Position := 0; // Verschlüsselten Stream auf den anfang setzen encStream.SaveToFile('c:\encode.txt'); // Stream speichern finally Free; end; end; finally encStream.Free; decStream.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var decStream: TMemoryStream; encStream: TMemoryStream; begin decStream := TMemoryStream.Create; // TStream für den Text erzeugen encStream := TMemoryStream.Create; // Stream für die Verschlüsselung try encStream.LoadFromFile('c:\encode.txt'); // Verschlüsselten Text laden encStream.Position := 0; with DefCipherClass.Create('', nil) do // Entschlüsseln begin try Mode := CipherMode; InitKey('password', nil); DecodeStream(encStream, decStream, encStream.Size); //Stream entschlüsseln decStream.Position := 0; ListBox2.Items.LoadFromStream(decStream); finally Free; end; end; finally encStream.Free; decStream.Free; end; end; |
Re: Entschlüsselungs-Probleme mit DEC
Dank Dir.
Ich bin schon seit mehr als 5 Stunden an dem Problem dran. Währe fast gegen eine Wand gelaufen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz