![]() |
Algorithmus umgekehrt darstellen
Hallo, folgender Algorithmus zum kodieren:
Code:
Beispielsweise der Buchstabe "H" für zeile[i] und "C" für code[j].
summe := (ord(zeile[i]) - 32) + (ord(code[j]) - 32);
summe := summe MOD 94; summe := summe + 32; hilf := hilf + chr(summe); Verschlüsselt kommt ein "k" raus. Nun möchte ich es dekodieren. Bisher habe ich folgendes:
Code:
zeile[i] ist hier das oben kodierte "k".
summe := ord(zeile[i]);
summe := summe - 32; summe := summe MOD 94; Das Einzige was jetzt noch "umgedreht" werden muss, ist diese Zeile:
Code:
Vielen Dank im Voraus!
summe := (ord(zeile[i]) - 32) + (ord(code[j]) - 32);
|
AW: Algorithmus umgekehrt darstellen
Hallo,
ich wüsste nicht, wie das funktionieren sollte. Du addierst zwei Zahlen miteinander. Dies ergibt eine Summe, wie willst du jetzt von der Summe zurück auf die beiden Zahlen kommen. Ob du 10 + 15 oder aber 12 + 13 addiert hast, beides würde 25 ergeben. Desweiteren benutzt du die MOD-Funktion (Restwert); 102 MOD 94 ergibt 8, aber 8 MOD 94 ergibt nicht 102. Oder habe ich etwas falsch verstanden?:gruebel: mfg Frank |
AW: Algorithmus umgekehrt darstellen
Hab's:
Code:
summe := (ord(zeile[i]) - 32) - (ord(code[j]) - 32);
if summe < 0 then summe := summe + 94; summe := summe + 32; hilf := hilf + chr(summe); |
AW: Algorithmus umgekehrt darstellen
zeile[i]:=chr(summe+32-ord(code[j]-32))
|
AW: Algorithmus umgekehrt darstellen
Delphi-Quellcode:
sollte sich bestimmt auch als
if summe < 0 then summe := summe + 94;
Delphi-Quellcode:
darstellen lassen.
summe := (summe + 94) mod 94;
Delphi-Quellcode:
Fällt dir was auf? (so vonwegen fast gleicher Code und so :stupid:)
// verschlüsseln
summe := (ord(zeile[i]) - 32) + (ord(code[j]) - 32); summe := summe mod 94; // summe := (summe + 94) mod 94; siehe PS hilf := hilf + chr(summe + 32); // hilf[i] := chr(summe + 32); wenn man vorher SetLength(Hilf, Length(Zeile)); macht oder man verschlüsselt direkt in Zeile, ohne Hilf // entschlüsseln summe := (ord(zeile[i]) - 32) - (ord(code[j]) - 32); summe := (summe + 94) mod 94; hilf := hilf + chr(summe + 32); PS: Wenn man im positiven Bereich ganze Vielfache von 94 dazuaddiert, dann ändert das am Ergebnis von
Delphi-Quellcode:
nichts (i=1 geht natürlich auch).
(x + 94*x) div 94
|
AW: Algorithmus umgekehrt darstellen
Der MOD-Operator macht ein zurückrechnen unmöglich - vermutlich wurde er deswegen auch gewählt ;) Es gibt unendlich viele Zahlen, die durch 94 geteilt, den Wert von summe-32 ergeben. Selbst, wenn man den Zahlenbereich auf den IsAlpha()-bereich begrenzt, gibt es noch immer mehr als einen möglichen Kandidaten.
|
AW: Algorithmus umgekehrt darstellen
Nee, hier ist es vermutlich etwas anders.
Diese Verschlüsselung funktioniert aber natürlich nur für einen kleinen Wertebereich. Es werden alle Zeichen vom Leerzeich bis zur Tilde verschlüsselt. Steuerzeichen und alles oberhalb des ASCII geht unwiderruflich kaputt, womit man also nur einfache einzeilige ASCII-Texte ohne Tabulator und Zeilenumbruch verschlüsseln kann. Innerhalb dieses 94-Zeichen großen Bereichs wird mit einem Integer-Überlauf gearbeitet. Also genauso, wie man es bei einem 256-Zeichen-Bereich machen kann, wenn man es als Byte speichert (AnsiChar halt) ... dort kannst du d#10 - 32 rechnen = #234 (-22) und bei #234 + 32 kommt wieder #10 (266) raus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 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-2025 by Thomas Breitkreuz