AGB  ·  Datenschutz  ·  Impressum  







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

Decrypten von Daten in TStringList fehlerhaft

Ein Thema von Kytrix · begonnen am 25. Aug 2012 · letzter Beitrag vom 26. Aug 2012
Antwort Antwort
Seite 1 von 3  1 23      
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#1

Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 17:38
Hallo ich verschlüssele einen String den ich dann in eine TStringList schreibe welche wiederum als datei gespeichert wird. Wennn ich nun aus dieser datei wieder entschlüsseln möchte so bekomme ich nicht das richtige ergebnis.

An der ver-/entschlüsselung kann es nicht liegen, denn:

Delphi-Quellcode:
  Test:='hallo';
  temp.Add(Encrypt(Test,w)); //temp=Tstringlist;
  test:= Encrypt(Test,w);
  temp.Add(Decrypt(test,w)) ;
klappt.

kann es sein das zusätzliche zeichen aus der datei in die Stringlist geschrieben/gelesen werden die die ver-/entschlüsselung "verfälschen"?

Delphi-Quellcode:
procedure TfMain.BtOpenEncryptedClick(Sender: TObject);//decrypt from file
Var w:Word;
begin
  w:= 16518;

  OpenDialog1.Execute;
  Info.LoadFromFile(OpenDialog1.FileName);

  EdShowInfo.Text:=Decrypt(Info.Text,w);
end;

procedure TfMain.SaveEncrypted(Sender: TObject);//save encrypted to file
Var InformationText: TStringList;
  w:Word;
  Test:String;
begin
  w:= 16518;
  InformationText:=TstringList.Create();
  Test:=Encrypt('TEST',w);
  InformationText.Add(Test);
  InformationText.SaveToFile(ExtractFilePath(ParamStr(0))+'reg_info.dat');
  MessageDlg('The registration information file "info.dat" was successfully created in:'+sLineBreak+sLineBreak+
              '"'+ExtractFilePath(ParamStr(0))+'"',mtInformation,[mbOK],0);
end;

function Encrypt (const s: string; Key: Word) : string;
var
  i : byte;
  c1,c2: Integer;
begin
  c1:=823748325;
  c2:=1343424;
  Result:=s;
  SetLength(Result, length(s));
  for i := 1 to (length (s)) do
  begin
    Result[i] := Char (byte (s[i]) xor (Key shr 8));
    Key := (byte (Result[i]) + Key) * c1 + c2
  end
end;

function TfMain.Decrypt (const s: string; Key: Word) : string;
var
  i : byte;
  c1,c2: Integer;
begin
  c1:=823748325;
  c2:=1343424;
  begin
    SetLength(Result, length(s));
    Result:=s;
    for i := 1 to (length (s)) do
    begin
      Result[i] := Char (byte (s[i]) xor (Key shr 8));
      Key := (byte (s[i]) + Key) * c1 + c2
    end
  end;
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
  Info:=TStringList.Create;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 17:51
Eine StringList speichert ihre Daten zeilenweise in einer Text-Datei. Beim Lesen werden diese Zeilen wieder zu einzelnen Stringlist-Einträgen. Kannst du sicherstellen, daß deine verschlüsselten Strings keine Zeilenende-Zeichen beinhalten?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#3

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 17:57
Es handelt sich bei dem "Text" der verschlüsselt wird und dann verschlüsselt abgespeichert wird um einen einzigen String abgesehen davon und um auf die eigentliche frage zu antworten: nein kann ich nicht bzw. wie soll ich das sicherstellen ?

schonmal ein danke im voraus =)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 17:58
Beim Verschlüsseln mit XOR entstehen aus einem Text binäre Daten, die man nicht verlustlos in einer StringList speichern kann.
Möglichkeit 1:
Auf StringList als Zwischenspeicher verzichten und stattdessen den String direkt speichern und laden.

Möglichkeit 2:
Des verschlüsselten String mit Base64 oder Base16 kodieren, damit keine undruckbaren Zeichen (inbesondere das Zeichen #0) in die Stringliste kommen.
Beim Entschlüsseln braucht man dann natürlich die Umkehrfunktion.

Base16 ist nichts anderes als die bekannte hexadezimale Codierung, bei dem 1 Byte mit 256 Zuständen in zwei Zeichen (0-F) umgewandelt wird.
http://www.delphipraxis.net/39740-he...aerstring.html
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 18:06
Was macht denn Encrypt?

Wenn bei der Verschlüsselung aus "einfachen" Zeichen "Steuerzeichen" entstehen, dann handelt es sich quasi um "binäre" Daten und diese darfst du nicht in Komponenten laden, welche auf entsprechende Steuerzeichen reagieren.

Bei der TStringList sind das vorallem #0, #10 und #13.
- alles nach einer #0 wird ignoriert
- und Zeichen #10 und #13 werden eventuell umgewandelt, bzw. die TStringList paßt Zeilenumbrüche an den des Systems an
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 18:14
Was macht denn Encrypt?
Steht doch im Code...

Wenn bei der Verschlüsselung aus "einfachen" Zeichen "Steuerzeichen" entstehen, dann handelt es sich quasi um "binäre" Daten und diese darfst du nicht in Komponenten laden, welche auf entsprechende Steuerzeichen reagieren.

Bei der TStringList sind das vorallem #0, #10 und #13.
- alles nach einer #0 wird ignoriert
- und Zeichen #10 und #13 werden eventuell umgewandelt, bzw. die TStringList paßt Zeilenumbrüche an den des Systems an
Das ist genau das worauf ich hinaus wollte. Wenn du nicht sicherstellen kannst, daß keine Steuerzeichen innerhalb des Strings auftauchen, kannst du keine StringList (zumindest nicht zum Schreiben in und Lesen aus einer Datei) benutzen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#7

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 18:24
Delphi-Quellcode:
function HexStringToStr(s : string):string;
begin
  if s = 'then
    Result := ''
  else
  begin
    if Odd(length(s)) then
      s := '0'+s;
    SetLength(Result, Length(s) div 2);
    HexToBin(Pchar(s), PChar(Result), Length(Result));
  end;
end;

procedure TfMain.BtOpenClick(Sender: TObject);
Var w:Word;
    Crypt: String;
begin
  w:=16518;

  OpenDialog1.Execute;
  RegInfo.LoadFromFile(OpenDialog1.FileName);
  Crypt:=RegInfo.Text;
  EdShowInfo.Text:=Decrypt(HexStringToStr(Crypt),w);// load decryptet from Base16
end;
und

Delphi-Quellcode:
function StrToHexString(const s : string):string;
begin
  if s = 'then
    Result := ''
  else
  begin
    SetLength(Result, Length(s)*2);
    BinToHex(PChar(s), PChar(Result), Length(s));
  end;
end;

procedure TfMain.SaveEncrypted(Sender: TObject);
Var InformationText: TStringList;
  w:Word;
  Crypt:String;
begin
  fMain.Visible:=false;
  w:= 16518;
  InformationText:=TstringList.Create();
  Crypt:=StrToHexString(Encrypt(CreateRegInfo,w)); // Save encrypted as Base16
  InformationText.Add(Crypt);
  InformationText.SaveToFile(ExtractFilePath(ParamStr(0))+'reg_info.dat');

end;
jetzt bekomme ich einen halb richtig entschlüsselten string

edit: irgendwo ist noch der wurm drinne ^^

danke für die antworten

Geändert von Kytrix (25. Aug 2012 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#8

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 18:52
es wird immer die hälfte der länge des verschlüsselten und strings richtig entschllüsselt
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 25. Aug 2012, 22:38
Da würde ich ein neueres Delphi mit UniCode-Char vermuten.
Natürlich wäre es für die Fehlersuche auch hilfreich,zu sehen mit welchen Daten Du arbeitest.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: Decrypten von Daten in TStringList fehlerhaft

  Alt 26. Aug 2012, 00:02
Warum liest/schreibst (ver/enrschlüsselst) Du die Daten nicht in einen (File)Stream, dann hättest Du den ganzen (Unicode)Stringärger "von der Backe"?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 00:31 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