Problem mit Xor

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

frigi

Betreff: Problem mit Xor

BeitragMi, Jan 12, 2005 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte in einer For-Schleife (,die den Schlüssel vorgibt,) 2 mal Xoren.
Beim 1. Mal einen Text, den ich jezt einfach mal "txt$" nenne. Soweit funktioniert auch alles, aber wenn ich dann direkt danach diesen geXorten Text mit dem gleichen Schlüssel wieder Xoren möchte, kommt IMMER wieder der Anfangstext "txt$" raus, obwohl Xor ja eigentlich einfach umkehrbar ist (das hat bis jezt auch immer geklappt).

Woran könnte das denn liegen (und wie krieg ichs weg)?

Holzchopf

Meisterpacker

BeitragMi, Jan 12, 2005 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Äh ja, wo genau liegt jetzt dein Problem?

Edit: Ich probiers jetzt mal blind: Entw. du willst, dass der Text nach dem zweiten Durchlauf noch mehr verschlüsselt ist, dann musst du natürlich den Schlüssel ändern, oder du willst, dass wieder der Anfangstext hervorkommt, dann musst du darauf achten, dass du zum ver- und entschlüsseln den selben Schlüssel benutzt.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

frigi

BeitragMi, Jan 12, 2005 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann wars nich genau genug ausgedrückt: ich will den Text wieder entschlüsseln. (deshalb hab ich ja auch das wörtchen "umkehrbar" geschrieben.)
ich mach das ganze ja in EINER schleife (direkt nacheinander) also müsste der Schlüssel schon gleich sein, aber das problem ist ja, dass bei JEDEM Schlüssel immer wieder der Anfangstext rauskommt.

Holzchopf

Meisterpacker

BeitragMi, Jan 12, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso... kann ich jetzt nicht nachvollziehen, aber guck dir mal das an:
Code: [AUSKLAPPEN]

SeedRnd MilliSecs()

txt$ = "hallo"

While Not KeyDown(1)

   a = Rand( 255 )
   
   For i = 1 To 2
   
      txt = verschl$( txt, a )
   
      Print txt
      
   Next   

   WaitKey()
Wend
End

Function verschl$( txt_in$, schl )

   ln = Len( txt_in )
   For i = 1 To ln
      txt_out$ = txt_out$ + Chr( Asc( Mid( txt_in, i, 1 ) ) Xor schl )
   Next
   
   Return txt_out
End Function


Das wichtigste dabei ist wohl, dass man Xor nicht auf einen ganzen String, sondern immer nur auf die einzelnen Zeichen anwenden kann.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

frigi

BeitragMi, Jan 12, 2005 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab kein problem mit dem Xoren an sich (das hab ich schon oft genug gemacht), sondern damit, dass wenn ich es 2 mal in einer schleife tute (was leider nötig ist) es beim 2. mal nicht mehr richtig funktioniert.

EDIT: deswegen meld ich mich hier ja auch, da ich es selbst überhaupt nicht verstehe, wieso das so ist. (und ich habs auch schon selbst versucht, aber es wird nur einfach nix...)

BladeRunner

Moderator

BeitragMi, Jan 12, 2005 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist ja absolut logisch dass wenn du in einer schleife 2mal hintereinander Xorst dass du dann wieder den Ursprungstext hast.
((text Xor x) xorx) = text. Daher ist das 2e xoren absolut unnötig.
Wenn du was anderes meinst, sag genauer worum es geht. mach ein Beispiel.
So ist nämlich nicht zu erkennen was zum Geier du jetzt wirklich willst Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Holzchopf

Meisterpacker

BeitragMi, Jan 12, 2005 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Frigi, du lallst Rolling Eyes Erst dachte ich, dein Problem sei entw, dass gar nicht verschlüsselt oder entschlüsselt werde oder, dass ein verschlüsselter Text nicht wieder entschlüsselt werden könnte, dann hast du nachgetragen, dass du den Text wieder entschlüsseln willst aber dass immer wieder der Anfangstext rauskommt - und jetzt noch dass....
Also ich habe jetzt einige Minuten nachgedacht und bin zum Schluss gekommen, dass du eigentlich folgendes Problem hast:
Du willst, wohl zu testzwecken, einen Text mittels Xor verschlüsseln und wieder entschlüsseln, selbstverständlich benutzt du dafür die selbe Routine mit dem selben Schlüssel, doch trotzdem wird der verschlüsselte Text nicht wieder in den Ursprungstext hach ne ich dummerchen hast ja geschrieben dass immer wieder der Anfangstext erscheint... hmm, dumm Confused
Ok nochmal von Vorne....
Du verschlüsselst einen Text - entschlüsselst ihn - und irgendwas stimmt damit nicht.... Doch bitte was? Shocked


Rolling Eyes

Darf man darum bitten, deinen Code, oder Teile davon, zu sehen, um deine Vorgehensweise nachvollziehen zu können?

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

frigi

BeitragMi, Jan 12, 2005 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Es soll am Ende mal ein Brute-Force-Tool zum knacken von Xor-Verschlüsselungen werden. Ich hatte mir das so gedacht: Zuerst wird der verschlüsselte Text geXort und dann wird diese "Verschlüsselung" (wenn der richtige Schlüssel gefunden ist, wird der Text ja entschlüsselt) ebenfalls geXort. Am Schluss wollte ich dann den Ursprungstext mit dem 2. geXorten vergleichen -> wenn beide übereinstimmen hat man den schlüssel.
Hoffentlich ist es jezt so verständlicher.

EDIT: der Code:

Code: [AUSKLAPPEN]
   For key=1 To 15 ;nur zum testen
    For I=1 To Len(txt$)
     Code$ = Code$ + Chr$(Asc(Mid$(txt$,I,1)) Xor key)
    Next
    For II=1 To Len(Code$)
     Code2$ = Code2$ + Chr$(Asc(Mid$(Code$,II,1)) Xor key)
    Next
   Next

Holzchopf

Meisterpacker

BeitragMi, Jan 12, 2005 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso jup jetzt gehts...
Ok ich erklärs mal so: Wenn du den verschlüsselten String mit einem falschen Key xorst, entsteht dabei eine Zeichenkette, die, wiederum mit dem falschen Key gexort, wieder die Ursprungszeichenkette erzeugt.
Ich muss dich also enttäuschen, da mit deiner überlegung der richtige Schlüssel nicht gefunden werden kann.
kleines Beispiel:
Nehmen wir an, jemand hat den Buchstaben "A" mit einem unbekannten Schlüssel verschlüsselt, dabei entstand der verschlüsselte Code "W". Jetzt könntest du natürlich "A" mit "W" xoren, um auf den Schlüssel zu kommen, du kennst allerdings "A" nicht.
Also fängst du unten an mit deiner Routine und xorst "W" mit dem ASCII-Code 001, dabei entsteht dann der Code "@", welches allerdings mit dem Schlüssel ASCII-Code 001 wieder zu "W" wird, obwohl der "richtige" Schlüssel eigentlich der ASCII-Code 022 wäre. Da du ja, durch die zweite Anwendung von XOR die erste quasi rückgängig machst, ist also dein test-Schlüssel immer zutreffend.

Sorry für die erschütternde Nachricht Wink

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

frigi

BeitragMi, Jan 12, 2005 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Omg, daran hatte ich nicht gedacht, danke. (irgentwie is das wahnsinnig logisch Rolling Eyes )

Mal schaun, ob mir was anderes einfällt...sonst muss ich mich wohl mit meinem Verschlüssler begnügen. Confused

frigi

BeitragDo, Jan 13, 2005 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach meinem "Blackout" von gestern hab ich mich wieder erhohlt, und gleich mal ne neu Idee^^:
Der verschlüsselte Text wird mit irgentwelchen schlüsseln geXort und im Ergebnis nach Klartextwörtern gesucht. wenn eine Übereinstimmung da ist, hat man schonmal gute Karten, dass ein passender Schlüssel gefunden ist.
(Funktioniert bis jezt auch ganz gut.)
Eine andere möglichkeit wäre auch, nicht den Text, sondern das Wort nach dem gesucht wird zu verschlüsseln und dann zu vergleichen. (Noch nicht ausprobiert.)

Holzchopf

Meisterpacker

BeitragDo, Jan 13, 2005 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja nach klartext zu suchen ist bestimmt das einfachste und wohl auch beste Verfahren.
Die andere Möglichkeit ist bestimmt auch denkbar, allerdings musst du da ja genau wissen, nach welchem Wort du suchst.
Voraussetzung ist auch, dass eine einfache XOR-Verschlüsselung, die durchs Band hindurch ein und der selbe Schlüssel auf jedes Zeichen im String anwendet, benutzt wurde . Und bitte, vergiss nicht, wenn dies der Fall ist, hast du bei der ersten Variante nach spätestens 256 Versuchen die Richtige Zeichenkette gefunden...

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

frigi

BeitragFr, Jan 14, 2005 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich nicht vergessen Wink
Die 2. Variante ist meiner Meinung nach das Beste!
nach wenigen ms hab ich schon alles was ich will.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group