AGB  ·  Datenschutz  ·  Impressum  







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

Algorithmus umgekehrt darstellen

Ein Thema von DavidJNG · begonnen am 29. Mai 2015 · letzter Beitrag vom 29. Mai 2015
Antwort Antwort
DavidJNG

Registriert seit: 19. Apr 2015
13 Beiträge
 
#1

Algorithmus umgekehrt darstellen

  Alt 29. Mai 2015, 09:01
Hallo, folgender Algorithmus zum kodieren:
Code:
  summe := (ord(zeile[i]) - 32) + (ord(code[j]) - 32);
  summe := summe MOD 94;
  summe := summe + 32;
  hilf := hilf + chr(summe);
Beispielsweise der Buchstabe "H" für zeile[i] und "C" für code[j].

Verschlüsselt kommt ein "k" raus.
Nun möchte ich es dekodieren.

Bisher habe ich folgendes:
Code:
   summe := ord(zeile[i]);
   summe := summe - 32;
   summe := summe MOD 94;
zeile[i] ist hier das oben kodierte "k".
Das Einzige was jetzt noch "umgedreht" werden muss, ist diese Zeile:
Code:
summe := (ord(zeile[i]) - 32) + (ord(code[j]) - 32);
Vielen Dank im Voraus!
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#2

AW: Algorithmus umgekehrt darstellen

  Alt 29. Mai 2015, 09:15
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?

mfg

Frank
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
DavidJNG

Registriert seit: 19. Apr 2015
13 Beiträge
 
#3

AW: Algorithmus umgekehrt darstellen

  Alt 29. Mai 2015, 09:26
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);
  Mit Zitat antworten Zitat
KarstenK

Registriert seit: 4. Dez 2007
Ort: Bärenthal
29 Beiträge
 
Delphi 2009 Enterprise
 
#4

AW: Algorithmus umgekehrt darstellen

  Alt 29. Mai 2015, 09:35
zeile[i]:=chr(summe+32-ord(code[j]-32))
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Algorithmus umgekehrt darstellen

  Alt 29. Mai 2015, 09:43
if summe < 0 then summe := summe + 94; sollte sich bestimmt auch als summe := (summe + 94) mod 94; darstellen lassen.

Delphi-Quellcode:
// 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);
Fällt dir was auf? (so vonwegen fast gleicher Code und so )


PS: Wenn man im positiven Bereich ganze Vielfache von 94 dazuaddiert, dann ändert das am Ergebnis von (x + 94*x) div 94 nichts (i=1 geht natürlich auch).
$2B or not $2B

Geändert von himitsu (29. Mai 2015 um 09:45 Uhr)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Algorithmus umgekehrt darstellen

  Alt 29. Mai 2015, 15:44
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Algorithmus umgekehrt darstellen

  Alt 29. Mai 2015, 16:14
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.
$2B or not $2B

Geändert von himitsu (29. Mai 2015 um 16:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:27 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