AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Entschlüsselungs-Probleme mit DEC

Ein Thema von Amnon82 · begonnen am 4. Mär 2005 · letzter Beitrag vom 5. Mär 2005
Antwort Antwort
Benutzerbild von Amnon82
Amnon82

Registriert seit: 5. Jan 2005
186 Beiträge
 
FreePascal / Lazarus
 
#1

Entschlüsselungs-Probleme mit DEC

  Alt 4. Mär 2005, 19:46
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:
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;
Ich verschlüssele jede Zeile, die in einer listbox steht einzeln und füge sie danach einer anderen listbox hinzu.

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?
  Mit Zitat antworten Zitat
Benutzerbild von Amnon82
Amnon82

Registriert seit: 5. Jan 2005
186 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Entschlüsselungs-Probleme mit DEC

  Alt 4. Mär 2005, 21:14
Hab weiter im Board gelesen.

Folgenden Code hab ich ohne Erfolg zum Einlesen der Datei probiert:

Delphi-Quellcode:
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;
Anscheinend wird die Datei nicht zeilenweise eingelesen bzw die Sonderzeichen verursachen immernoch den Zeilenumbruch ...

danach hab ich listbox2.savetofile(edit11.text); in ...

Delphi-Quellcode:
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
... geändert, aber ohne Erfolg. Anscheinend liegt es am Einlesen ...

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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Entschlüsselungs-Probleme mit DEC

  Alt 5. Mär 2005, 06:27
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Amnon82
Amnon82

Registriert seit: 5. Jan 2005
186 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Entschlüsselungs-Probleme mit DEC

  Alt 5. Mär 2005, 06:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Entschlüsselungs-Probleme mit DEC

  Alt 5. Mär 2005, 07:09
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Amnon82
Amnon82

Registriert seit: 5. Jan 2005
186 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Entschlüsselungs-Probleme mit DEC

  Alt 5. Mär 2005, 08:27
Dank Dir.

Ich bin schon seit mehr als 5 Stunden an dem Problem dran.
Währe fast gegen eine Wand gelaufen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz