Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie soll ich eine Zeichenkette verschlüsseln? (https://www.delphipraxis.net/61345-wie-soll-ich-eine-zeichenkette-verschluesseln.html)

Aurus 20. Jan 2006 09:53


Wie soll ich eine Zeichenkette verschlüsseln?
 
Hallo

Ich habe zwar zuerst die Suche benützt aber nicht konkretes auf mein Problem gefunden.


Ich will einen Zeichenketten z.B "123.dssdfersd.2er5rre" (Ist eine Kundennummer) mit XOR verschlüsseln.
Der Schlüsseln(100 Stellen) wurde mit einem Zufallsgenerator generiert und jede Stelle hat einen
Wert zwischen 0-255;

Jezt kann sein dass durch die XOR-Verschlüsselung gewissen Zeichen den Wert 0 oder einen anderen Wert haben dem kein Zeichen zusteht.


Nun möchte ich diese Zeichenkette einer DLL übergeben. Doch Strings darf manja nicht überbegen.

Wenn ich ihn als PChar übergeben wird die Zeichenkette auf einmal gekürzt wenn z.B. der Wert Null auftaucht da das immer das Ende eines PCahrs ist.


Wie soll ich das Problem lösen?

Soll ich die Zeichenkette in einem Stream übergeben oder gibt es da einfachere und elegantere Lösungen?


Gruss

Aurus

himitsu 20. Jan 2006 10:06

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
Man könnte dafür ja einen Record, oder ein Array verwenden.

Wenn z.B. die Zeichenfolge nicht länger als 100 Zeichen ist, dann

Delphi-Quellcode:
Type T = Record
    Data: packed Array[0..100] of Byte;
  End;
oder

Delphi-Quellcode:
Type T = packed Array[0..100] of Byte;
Wenn du solchene Datenstruktur übergibst, dann wird ja nichts mehr abgeschnitten, da ja eine feste Größe angegeben ist.


es könnte z.B. so aussehn (ungetestet, aber es sollte funktionieren)
Delphi-Quellcode:
Var S: String;
  R: packed Array[0..100] of Byte;

// S an R übergeben und verschlüsseln
Move(@R[0], @S[1], Length(S) + 1);
For i := 0 to 100 do
  R[i] := R[i] xor Schlüssel[i];

// R entschlüsseln und an S übergeben
For i := 0 to 100 do
  R[i] := R[i] xor Schlüssel[i];
S := PChar(@R[0]);

Aurus 20. Jan 2006 10:22

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
Hallo himitsu


Die Idee mit einem Array mit fester Grösse hatte ich auch schon.

Das geht sicher, nur ich bin sehr negativ auf feste grössen eingestellt,
da es sein kann dass ich später das Programm ändere und vielleicht auf einmal nicht 100 sondern 100'000 Zeichen übermittle.

Ich möchte eher was Variables. Gibt es da keine elegantere/flexiblere Lösung


Gruss

Aurus

glkgereon 20. Jan 2006 10:32

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
must du die daten denn auch wieder entschlüsseln?

oder würde es reichen das ganze zu hashen und dann immer zu vergeleichen?
das wäre wesentlich einfacher, da du bei md5 zB immer 32 Zeichen hättest die nur aus 0..9 und A..F bestehen....

Aurus 20. Jan 2006 10:37

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
hallo glkgereon


Ich ich entschlüssle die Zeichenkette wieder und hänge zusätzlich noch was dran, verschlüssle es wieder mit einem Zufallsschlüssel und schicke es wieder ans Programm zurück.


Gruss

Aurus

alzaimar 20. Jan 2006 10:40

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
So, äh... Einen Pointer sowie die Anzahl der Bytes kann man doch an eine DLL übermitteln, oder?

Robert Marquardt 20. Jan 2006 10:42

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
Ich wuerde den String nach der Verschluesselung auf lesbare Zeichen expandieren.
Die einfachste Methode ist die Hexziffern der Bytes zu nehmen.

Eleganter ist es, den String als Bitstrom zu verstehen.
Eine Tabelle von 32 oder 64 lesbaren Zeichen nehmen und dann je 5 bzw. 6 Bits der Daten in ein Zeichen umsetzen.
Das Resultat ist ein laengerer String mit garantiert lesbaren Zeichen.

Aurus 20. Jan 2006 10:45

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
Hallo

Vermutlich hast du recht mit Pointer. Damit habe ich sehr sehr wenig Erfahrung und ist mir ein graus.
Könnte man das nicht ein Stream verwenden?
Darf man streams überhaupt einer DLL übergeben?


Leider hat der Zeichenkette/String nach der Verschlüsselung auch keine Lesebaren Zeichen mehr
Da der mit XOR und einem Schlüssel mit Werten zwischen 0-255 verschlüsselt wird.

Wie kann ich machen dass die Zeichen "lesbar" bleiben ?
Das mit den 5/6 Bit habe ich nicht verstanden.

Gruss

Aurus

Daniel Schuhmann 20. Jan 2006 11:14

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
Zitat:

Zitat von Aurus
Wie kann ich machen dass die Zeichen "lesbar" bleiben ?
Das mit den 5/6 Bit habe ich nicht verstanden.

Robert meint die Base64-Kodierung. Diese wird zum Beispiel auch beim Senden von Emails angewandt.

Robert Marquardt 20. Jan 2006 11:16

Re: Wie soll ich eine Zeichenkette verschlüsseln?
 
Man kann einer DLL natuerlich beliebige Daten in einem Puffer uebergeben. PChar ist ja auch nichts anderes.
Es besteht nur die Vereinbarung das der Inhalt ein String ist der an einem #0 aufhoert.

Was du uebergeben willst ist ein Puffer plus Groessenangabe des Puffers und Laengenangabe des Inhalts.
In der DLL darf man dann nicht C-String-Verarbeitung treiben. Man benutzt die Laengenangabe um die Daten zu entschluesseln und die Groessenangabe um herauszubekommen ob die Ergaenzungen noch in den Puffer passen.

Das mit der Umarbeitung in lesbare Zeichen kann man dann lassen.

Es muss natuerlich die DLL umgeschrieben werden.

Als Alternative kann der XOR-Schluessel so gewaehlt werden das nie ein #0 Zeichen im verschluesselten String auftaucht.
Dazu muss nur sichergestellt werden das nie zwei gleiche Zeichen aufeinandertreffen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Seite 1 von 2  1 2      

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