xor-Verknüpfung < Krypt.+Kod.+Compalg. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Ich habe diese Frage in keinem anderen Forum auf anderen Internetseiten gestellt!
Hallo Leute!
Erst einmal möchte ich euch alle als totaler Neuling begrüßen. Ich bin durch Zufall auf diese Seite gestoßen, indem ich bei "Google" einige Suchbegriffe eingegeben und den Vorschlag auf diese Seite erhalten habe. Ist schön, hier zu sein.
So, nachdem der Kuchen aufgegessen und der Kaffee ausgetrunken ist, kommt hier mein Problem:
Ich habe zwei Keys, die ich mit Hilfe von jeweils einem weiteren Key mit Hilfe der xor-Verknüpfung bearbeiten muß, so daß am Ende zwei bestimmte Zahlen herauskommen.
Im einzelnen sieht das so aus:
Zwei Keys müssen jeweils miteinander verknüpft werden. Diese Keys ergeben je eine Nord- und eine Ost-Koordinate. Wenn man beide Koordinaten gefunden hat, dann hat man die Lösung.
Für die Nord-Koordinate muß ich folgende Keys miteinander verknüpfen:
CD4711AF mit C84750AD
Für die Ost-Koordinate muß ich folgende Keys miteinander verknüpfen:
668ABA62 mit 6609CFE6
Mein Lösungsansatz: Wenn ich mir die beiden Keys angucke, dann fällt mir auf, daß es keinen Buchstaben gibt, der "größer" als F ist. Daraus folgere ich, daß ich das ganze per Hexadezimalsystem betrachten kann.
Ich muß also die einzelnen Keys in Hexadezimalzahlen umwandeln.
CD4711AF wäre demnach:
Für C (= 12): 1 1 0 0
Für D (= 13): 1 1 0 1
Für 4: 1 0 0
Für 7: 1 1 1
Für 1: 1
Für 1: 1
Für A (= 10): 1 0 1 0
Für F (= 15): 1 1 1 1
So mache ich das dann mit den restlichen drei Schlüsselteilen. Ich hoffe, daß ich bis dahin alles richtig gemacht habe.
So, jetzt kommt mein Problem. Ich habe jetzt einen Wust an Hexadezimalzahlen. Wie verknüpfe ich die untereinander? Was muß ich da machen?
Und wenn ich sie mit der xor-Verknüpfung bearbeitet habe, wie wandele ich sie dann wieder in Zahlen von 0 bis 9 um?
Wäre nett, wenn ihr mir da einen Denkanstoß geben könntet.
Danke für eure Hilfe!
Dave
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 08:19 Sa 16.04.2005 | Autor: | wluut |
> Hallo Leute!
>
> Erst einmal möchte ich euch alle als totaler Neuling
> begrüßen. Ich bin durch Zufall auf diese Seite gestoßen,
> indem ich bei "Google" einige Suchbegriffe eingegeben und
> den Vorschlag auf diese Seite erhalten habe. Ist schön,
> hier zu sein.
Also erstmal:
> CD4711AF wäre demnach:
> Für C (= 12): 1 1 0 0
> Für D (= 13): 1 1 0 1
> Für 4: 1 0 0
> Für 7: 1 1 1
> Für 1: 1
> Für 1: 1
> Für A (= 10): 1 0 1 0
> Für F (= 15): 1 1 1 1
So weit, so gut.
Allerdings solltest Du für jede Hexadezimal-Ziffer grundsätzlich 4 Bits (Binärstellen) spendieren, damit Du für die ganze Zahl CD4711AF eine korrekte Darstellung bekommst.
D.h. z.B.: Für 1: 0 0 0 1, für 4: 0 1 0 0.
Dann kannst Du die Keys (=Binärzahlen) im Ganzen hinschreiben:
CD4711AF =
1100 1101 0100 0111 0001 0001 1010 1111
und die anderen genauso.
> So, jetzt kommt mein Problem. Ich habe jetzt einen Wust an
> Hexadezimalzahlen. Wie verknüpfe ich die untereinander? Was
> muß ich da machen?
Ein Vorteil der Binärdarstellung ist, dass man jetzt logische Verknüpfungen ganz leicht, nämlich Bit für Bit ("Ziffer für Ziffer"), durchführen kann.
Beispiel für UND-Verknüpfung:
1100 UND
0101 =
0100
In Deinem Fall schreibst Du am besten die zu verknüpfenden Binärzahlen untereinander und schreibst darunter für jede Stelle das verXORte Bit.
Dann bekommst Du eine neue Binärzahl mit 8x4 Stellen.
Diese musst Du dann nur noch ein ein Format Deiner Wahl zurück verwandeln.
> wie wandele ich sie dann wieder in Zahlen von 0 bis 9 um?
Bei Binärzahlen steht jede Stelle für eine höhere Zweierpotenz.
(Tabelle: Binärzahl = Zweierpotenzen = Dezimalzahl)
1 = [mm] 2^0 [/mm] = 1
10 = [mm] 2^1 [/mm] = 2
100 = [mm] 2^2 [/mm] = 4
...
0110 0101 = [mm] 2^6 [/mm] + [mm] 2^5 [/mm] + [mm] 2^2 [/mm] + [mm] 2^0 [/mm] = 64+32+4+1 = 101
...
usw.
Bei größeren Zahlen ist es oft einfacher, die Zahl zuerst wieder in Hexadezimalschreibweise umzuformen, d.h. Du bekommst wieder so etwas Ähnliches wie:
B2AE38C1
Dabei steht jede Stelle für eine 16er-Potenz, also:
B2AE38C1 = [mm] 11*16^7+2*16^6+10*16^5+14*16^4+3*16^3+8*16^2+12*16^1+1*16^0=öh... [/mm] kann ich auch nicht im Kopf
So, ich hoffe, ich habe ein wenig Licht ins Dunkel gebracht, lösen musst Du Deine Aufgabe natürlich selber :-p
|
|
|
|
|
Hallo Dave,
> Für die Nord-Koordinate muß ich folgende Keys miteinander verknüpfen:
> CD4711AF mit C84750AD
>
> Für die Ost-Koordinate muß ich folgende Keys miteinander verknüpfen:
> 668ABA62 mit 6609CFE6
Gehe (zumindest unter Windows) auf Start [mm] $\to$ [/mm] Programme [mm] $\to$ [/mm] Zubehör [mm] $\to$ [/mm] Rechner.
Im Programm klickst Du auf Ansicht [mm] $\to$ [/mm] Wissenschaftlich.
Oben klickst Du auf Hex und gibst den ersten Schlüssel ein. Danach auf XOR (rechts) klicken, und dann den zweiten Schlüssel eingeben und 'Return'.
Wenn Du dir die Aufgabe etwas schwerer machen willst, kannst Du auch ein kleines C-Programm schreiben:
1: | // testit.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
| 2: | //
| 3: |
| 4: | #include "stdafx.h"
| 5: | #include <stdio.h>
| 6: | #include <stdlib.h>
| 7: |
| 8: | int main(int argc, char* argv[])
| 9: | {
| 10: | char sz_key1[256];
| 11: | char sz_key2[256];
| 12: |
| 13: | printf("Gib ein Schluesselpaar in Hexadezimal ein (Maximallaenge 256 Zeichen):\nSchluessel 1: ");
| 14: | gets(sz_key1);
| 15: |
| 16: | printf("Schluessel 2: ");
| 17: | gets(sz_key2);
| 18: |
| 19: | unsigned long key1 = strtoul(sz_key1, NULL, 16);
| 20: | unsigned long key2 = strtoul(sz_key2, NULL, 16);
| 21: |
| 22: | printf("\nErgebniszahl: %X\n\n", key1^key2);
| 23: |
| 24: | return 0;
| 25: | } |
Das Programm nimmt vom Benutzer zwei Zahlen-Strings in Hex. entgegen, wandelt diese um, und führt die eigentliche Berechnung in der letzten printf-Anweisung durch.
Viele Grüße
Karl
|
|
|
|
|
Hurra, ich habe es geschafft. Und das Ergebnis war ganz toll und hat mich um eine Geldtasche reicher gemacht. Vielen Dank für eure Denkansätze. Das Problem ist gelöst.
Dave
|
|
|
|