![]() |
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 |
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:
oder
Type T = Record
Data: packed Array[0..100] of Byte; End;
Delphi-Quellcode:
Wenn du solchene Datenstruktur übergibst, dann wird ja nichts mehr abgeschnitten, da ja eine feste Größe angegeben ist.
Type T = packed Array[0..100] of Byte;
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]); |
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 |
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.... |
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 |
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?
|
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. |
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 |
Re: Wie soll ich eine Zeichenkette verschlüsseln?
Zitat:
![]() |
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 10:25 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