![]() |
XOR-Resultat als String
Ich habe zwei Schlüssel (Key1 und Key2) mit xor verknüpft:
Delphi-Quellcode:
Der Resultatstring enthält die richtigen Werte aber eben Bit für Bit:
for i := 1 to x do
Result[x] := Chr(Byte(Key1[x]) xor Byte(Key2[x])); Beispiel:
Delphi-Quellcode:
ich möchte aber:
Result = #3#3#2#2#3#A#A#A
Delphi-Quellcode:
Result = '33223AAA'
|
Re: XOR-Resultat als String
du könntest die '#' mit StringReplace entfernen.
Grüße Klaus |
Re: XOR-Resultat als String
Hallo,
kurz und knapp
Delphi-Quellcode:
Stephan
Result := AnsiReplaceText(Result,'#',''); // in StrUtils definiert, ggfls. in Uses aufnehmen.
|
Re: XOR-Resultat als String
Hmm... du willst eine lesbare ausgabe der bytewerte?
Da gibts drei Möglichkeiten: a) Ausgabe als Hex->zwei stellen pro byte ("FF01AB") b) Ausgabe in Dezimal -> drei stellen pro byte ("255255001010011") c) ausgabe im klartext mit delimiter->mind. zwei stellen pro byte (#255#255#1#10#11") Das ganze ist über verschiedene funktionen machbar. @die zwei anderen komiker: loooool..... |
Re: XOR-Resultat als String
@DGL Luke:
wenn man aus: #3#3#2#2#3#A#A#A diese machen will: 33223AAA Dann sind die genannten Methoden sind nicht so verkehrt. Wenn die Ausgabe eine ganz andere sein soll, dann greifen sie natürlich nicht. Grüße einer der Komiker |
Re: XOR-Resultat als String
Hallo alle
Danke erstmal für die prompten Antworten. Falls die Problemstellung nicht überall gleich rüberkam: sorry. Stephan und Klaus haben mich schon richtig verstanden. Es geht mir darum die Hex-Werte lesbar (in diesem Fall ohne $) darzustellen. Dies entspricht dann Lösung a.) von Luke. Ich kann aber $ wohl nicht mit Replace ersetzen, da dieses Zeichen kein Teil vom String darstellt sondern nur die Hex-Repräsentation der nächsten Stelle anzeigt. |
Re: XOR-Resultat als String
@Klaus01 und nahpets:
Ihr habt das System noch nicht verstanden, wie man mit Pascal nicht druckbare Zeichen darstellt. Wenn ich an einen String z.B. ein CarriageReturn + Linefeed anhängen möchte schreibe ich:
Delphi-Quellcode:
Das Rautezeichen ist nur ein Escapezeichen, dass aber im eigentlichen String nicht vorkommt.
s :='Zeile, abgeschlossen mit CR/LF'#13#10;
Deshalb sind alle Ersetzungsaktion sinnlos.
Delphi-Quellcode:
s := #65#66#67; // ist das Gleiche wie 'ABC'
|
Re: XOR-Resultat als String
Zitat:
Delphi-Quellcode:
Ungetestet, Fehlerbehandlung fehlt natürlich auch noch. Ausserdem wird angenommen dass Key1 und Key2 gleich lang sind und den gleichen Indexbereich haben. Hat sicherlich noch Optimierungspotential.
function XorMyKeys(const Key1, Key2: Array of Byte): string;
var i :Integer; begin for i:=Low(Key1) to High(Key1) do begin result:=result+Format('%.2x',[Key1[i] xor Key2[i]]); end; end; Raus kommt ein String der die Hexäquivalente der XOR-Verschluesselung enthält. |
Re: XOR-Resultat als String
Hallo,
mit der Funktion ![]()
Delphi-Quellcode:
Gruß Hawkeye
var
sInput : string; sOutput : string; begin sInput := #3#3#2#2#3#$A#$A#$A; SetLength (sOutput, 2 * Length(sInput)); BinToHex (PChar(sInput), PChar(sOutput), Length(sInput)); end; |
Re: XOR-Resultat als String
Das kommt meinem Wunsch nun doch sehr nahe. Ich bekomme:
Delphi-Quellcode:
Muss ich da manuell nun jedes zweite Zeichen entfernen oder gibt es da auch noch eine elegantere Lösung? Bzw. ich denke ich müsste vor dem xor nicht ein Byte mit einem Zeichen sondern ein Byte mit zwei Zeichen befüllen (bzw. ein Nibble mit einem Zeichen). Geht das?
03030202030A0A0A
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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