Einfache Verschlüsselung C Einstieg

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Shrax
Beiträge: 87
Registriert: Sa Dez 27, 2008 8:08 pm

Einfache Verschlüsselung C Einstieg

Beitrag von Shrax » Do Feb 19, 2009 5:17 pm

Hi!

Ich komm einfach mit dem Buch lesen --> Programm Tippen ---> Ausprobieren ---> Rumspielen --> weiterlesen nicht ganz zurecht.

Deswegen will ich gleich am anfang ein Projekt an dem ich immer wenn ich was neues Lerne weiterarbeite und vieleicht am ende es funktionsfähig da habe.

Bevor ich das mache würde ich gerne Wissen wie schwer das eigentlich ist wo ich mir vorgenommen habe.

Undzwar will ich ein Verschlüsselungs programm. Dass soll einen Normalen Text einfach umwandeln und ein anderer soll es mit diesem Programm zurück Wandeln können.

Ich bin drauf gekommen als ich mit meinen Schulnachbarn aufn Blatt Papier PC Schriften gemalt habe. Also immer das Alphabet und dann die Buchstaben anders schreiben. Dann dachten wir uns wir könnten doch ne eigene Verschlüsselung machen (Wir könnten auch generatoren nehmen aber das wollten wir nicht^^) und n Programm das Ver- und Entschlüsselt.

Das alles soll ungefähr so ablaufen:

Jemand hat einen Text:

Code: Alles auswählen

Hallo Welt
Dieser soll Verschlüsselt werden.
Und zwar jetzt nicht mit dem AES-Twofish.... Algoryhtmus sondern einfach n kleinen Schlüssel den ich selber schreibe.

Ich hab in der Schule nur als Beispiel mir n kleinen Schlüssel ausgedacht.

das Alphabet:
ABCDEFGHIJKLMNOPQRTUVWYXZ

Jetzt tausche ich das etwas aus:
ABCDEFGHIJKLMNOPQRTUVWYXZ
ZYVTQOMKIGECABDFHJKNPRUWX
Was ja dann der Schlüssel wäre.

Und dann mache ich kleine zahlen davor die bedeuten dass man bei der ersten zahl z. B. ² 2 Buchstaben vor und bei ²³ Zwei vor und 3 zurück geht.
Also könnte man Hallo Welt so Verschlüsseln:
F³²Z²²C³³C³³F²³
Hallo
R³³O²³C²²N²³³³
Welt
F³²Z²²C³³C³³F²³_R³³O²³C²²N²³³³

Das ist zwar nicht unbedingt sehr Schwer zu knacken aber uns reicht es ;D

Ich dachte mir jetzt das ich von diesen Leichten Verschlüsselungen 5 Verschiedene mache.
Ich sag ihm dann vorher welchen wir benutzen, und dann bekommt er und ich das Programm und wir können unsere Texte Verschlüsseln.

Also ein Programm wo ich einen von 5 von mir Festgelegte schlüsseln wähle, den Text einkopier und er mir dann den Klartext zeigt.

Das ganze muss nur auf Windows laufen. Sollte aber auf XP und Vista laufen. Und auf Win7;?.

Jetzt wollte ich mal fragen ob so ein Programm ein ding der unmöglichtkeit für einen der C lernt ist oder ob sowas zu machen wäre.

Muss ja nicht schnell sein eben immer wieder stück für stück?

Und Anschliesend kann man das ja noch verbessern...

Was sagt ihr dazu?^^

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Einfache Verschlüsselung C Einstieg

Beitrag von cloidnerux » Do Feb 19, 2009 5:29 pm

Eine einfach verschlüsselung ist kein Ding,
z.B
könntest du alle chars um 3 Erhöhen und schon kanns keiner mehr Lesen.
Also verschlüsselung sollte kein Ding sein.
Ich komm einfach mit dem Buch lesen --> Programm Tippen ---> Ausprobieren ---> Rumspielen --> weiterlesen nicht ganz zurecht.
Dann machs doch einfach so:
Buch Lesen->Darüber nachdenken->Konzept daraus entwickeln->ein Programm dazu schreiben->merken das du noch dieses oder jenes wissen müsstes um das Prog zu verbessern->weiterlesen->darüber Nachdenken.....
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Einfache Verschlüsselung C Einstieg

Beitrag von fat-lobyte » Do Feb 19, 2009 5:54 pm

Tag! Ganz interessantes Projekt. Ich denke ein einfaches verschlüsselungsprogramm sollte machbar sein, wenn auch etwas aufwändig. Ihr werdet ws. öfters den Code wegschmeissen dürfen, und alles nochmal schreiben, vor allem am Anfang. Aber das gehört dazu.
Nur bitte aufpassen: Kryptographie ist ein weites und kompliziertes Gebiet das viel Informatik und vor allem Mathematik enthält. Deswegen: verwendet das Programm nicht, um wichtige Dateien zu verschlüsseln. Ich weiß nicht wie gut ihr seid, aber sehr wahrscheinlich nicht gut genug um einen Algorithmus zu schreiben den man als "hinreichend Sicher" bezeichnen könnte.
Spielen: ja.
Verwenden: nein

So ein paar Grundregeln für die Kryptographie
Man geht von 3 Personen aus:
1. Sender
2. Empfänger
3. Abhörer

Die Aufgabe ist folgende: du willst eine Nachricht von 1 zu 2 so verschicken, dass wenn sie 3 liest, er sie nicht versteht.

Es muss etwas geben was 1 und 2 von 3 Unterscheidet, denn ansonsten kann ja sowieso jeder alles lesen. Diese "Unterscheidung" ist oft eine Art "Schlüssel"

Du musst von folgendem ausgehen:
Der Abhörer weiß fast ALLES. Er kennt dein Programm in und auswendig, er kennt die Abläufe die ihr durchführt, er kennt alle algorithmen und auch alle beteiligten. Er kann auch alles sehen was ihr tut. Er hat auch genug Geld um sich die besten Supercomputer der Welt zu kaufen und euren Code so zu knacken.
Es gibt nur 2 dinge, die er nicht weiß: 1. Die Nachricht selbst (ansonsten wäre alle mühe vergebens) und 2. den Schlüssel.
Wieso muss man davon ausgehen? Alles was ihr tut kann man nachvollziehen. Mit einigem Aufwand kann man aus Maschinencode ungefähr herausfinden, was das Programm tut. Man könnte euch bei euren Abläufen beobachten und man könnte eure Algorithmen nachvollziehen.

Deswegen
Shrax hat geschrieben: Ich hab in der Schule nur als Beispiel mir n kleinen Schlüssel ausgedacht.

das Alphabet:
ABCDEFGHIJKLMNOPQRTUVWYXZ

Jetzt tausche ich das etwas aus:
ABCDEFGHIJKLMNOPQRTUVWYXZ
ZYVTQOMKIGECABDFHJKNPRUWX
Was ja dann der Schlüssel wäre.
das wäre nach der oberen Annahme nicht der Schlüssel, sondern Teil des Algorithmus. Der Abhörer kennt den!

Shrax hat geschrieben:Und dann mache ich kleine zahlen davor die bedeuten dass man bei der ersten zahl z. B. ² 2 Buchstaben vor und bei ²³ Zwei vor und 3 zurück geht.
Also könnte man Hallo Welt so Verschlüsseln:
F³²Z²²C³³C³³F²³
Hallo
R³³O²³C²²N²³³³
Welt
F³²Z²²C³³C³³F²³_R³³O²³C²²N²³³³
Wieso mehrere Zahlen? Der Abhörer braucht nur alle zahlen zusammenfügen und hat dann nur eine einzige. (Er weiß ja, was die zahlen bedeuten!)
Shrax hat geschrieben:Das ist zwar nicht unbedingt sehr Schwer zu knacken aber uns reicht es ;D
Gut, solange ihr es nicht für wichtige Dinge verwendet.
Shrax hat geschrieben:Ich dachte mir jetzt das ich von diesen Leichten Verschlüsselungen 5 Verschiedene mache.
Ich sag ihm dann vorher welchen wir benutzen, und dann bekommt er und ich das Programm und wir können unsere Texte Verschlüsseln.
DAS ist nun der tatsächliche Schlüssel. Die Information darüber, welche Buchstabenzuordnungen ihr verwendet, und sonst gar nichts. Und das sind 5 möglichkeiten. Nicht besonders viel, oder? Sollte für jemanden, der alles weiß und alles kann nicht so schwer sein, oder? ;-)

Ich hab nen gegenvorschlag:
Schreibt doch ein simples XOR verschlüsselungsprogramm.
XOR heißt "Ausschließendes Oder" und ist der lieblingsoperator der Kryptographen ;-)
Es wird auf zwei Bits angewendet, und produziert ein drittes je nachdem ob die beiden ersten gleich waren oder nicht:

0 XOR 0 = 0 Die beiden waren nicht verschieden
1 XOR 1 = 0 Die beiden waren wieder nicht verschieden
1 XOR 0 = 1 Die beiden waren verschieden
0 XOR 1 = 1 Die beiden waren wieder verschieden


Nun, wie wendet ihr das auf euer Programm an? Buchstaben in eurem Programm sind nur Zeichen, und diese Zeichen sind in wirklichkeit eine Zahl. Und zwar so eine Zahl, die als folge von Bits abgespeichert ist. Wenn ihr einen Schlüssel (also eine Zahl) habt, dann XOR't ihr einfach jedes Bit des schlüssels mit jedem Bit der Nachricht, und kriegt so eure verschlüsselte nachricht heraus.
Und wie gehts wieder zurück? Ganz einfach, XOR't die verschlüsselte Nachricht wieder mit dem Schlüssel. Das XOR hat nämlich eine Nette eigenschaft: XOR't man das ergebnis mit einer der beiden eingangswerte kommt der andere anfangswert hinaus. Nehmen wir die oberen operationen, und sagen wir, dass das erste Bit eure nachricht ist, das zweite der schlüssel und die verschlüsselte nachricht. Dann XOR'en wir wieder das ergebnis mit der zweiten zahl um die erste zu bekommen:

0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0

Tataa, schon habt ihr auf der rechten seite (als Nachricht) wieder das was auf oben auf der linken seite Stand.

Ich hoffe ich habe mich verständlich ausgedrückt... Ansonsten nachfragen.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Einfache Verschlüsselung C Einstieg

Beitrag von Dirty Oerti » Do Feb 19, 2009 6:33 pm

Shrax hat geschrieben:Ich hab in der Schule nur als Beispiel mir n kleinen Schlüssel ausgedacht.

das Alphabet:
ABCDEFGHIJKLMNOPQRTUVWYXZ

Jetzt tausche ich das etwas aus:
ABCDEFGHIJKLMNOPQRTUVWYXZ
ZYVTQOMKIGECABDFHJKNPRUWX
Was ja dann der Schlüssel wäre.
Das ist das Vigenère-Verschlüsselungs-Verfahren. Zumindest bis dahin. Was genau du mit den Zahlen willst hab ich so jetzt nicht verstanden ;)
Shrax hat geschrieben:Ich dachte mir jetzt das ich von diesen Leichten Verschlüsselungen 5 Verschiedene mache.
Ich sag ihm dann vorher welchen wir benutzen, und dann bekommt er und ich das Programm und wir können unsere Texte Verschlüsseln.

Also ein Programm wo ich einen von 5 von mir Festgelegte schlüsseln wähle, den Text einkopier und er mir dann den Klartext zeigt.
Das wäre nicht klug. Dadurch vernichtest du die ganzen Bemühungen, weil der Schlüssel dann wirklich einfach zu bekommen ist.

Speicher den Schlüssel lieber in einer Datei oder lass ihn zum entschlüsseln angeben.
Dann kannst du mit deinem Freund ausmachen, dass alle 3 Tage (z.B.) der Schlüssel gewechselt wird, du musst ihm vorher nur eine Liste mit den nächsten Schlüsseln geben.

Das Programm zu schreiben dürfte kein großese Problem darstellen.
Du nimmst einfach Buchstabe für Buchstabe und ersetzt ihn durch den vom Schlüssel vorgesehenen.

Code: Alles auswählen

char key [256];

char chiffre = key [ klartext[TEXTPOSITION] ];
:)
MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Shrax
Beiträge: 87
Registriert: Sa Dez 27, 2008 8:08 pm

Re: Einfache Verschlüsselung C Einstieg

Beitrag von Shrax » Do Feb 19, 2009 7:26 pm

Tag! Ganz interessantes Projekt. Ich denke ein einfaches verschlüsselungsprogramm sollte machbar sein, wenn auch etwas aufwändig. Ihr werdet ws. öfters den Code wegschmeissen dürfen, und alles nochmal schreiben, vor allem am Anfang. Aber das gehört dazu.
Danke!
Dann werd ich mal Stück für Stück anfangen.
Programmieren werde nur ich, er hilft mir bei ideen und so^^
Nur bitte aufpassen: Kryptographie ist ein weites und kompliziertes Gebiet das viel Informatik und vor allem Mathematik enthält. Deswegen: verwendet das Programm nicht, um wichtige Dateien zu verschlüsseln. Ich weiß nicht wie gut ihr seid, aber sehr wahrscheinlich nicht gut genug um einen Algorithmus zu schreiben den man als "hinreichend Sicher" bezeichnen könnte.
Spielen: ja.
Verwenden: nein

So ein paar Grundregeln für die Kryptographie
Man geht von 3 Personen aus:
1. Sender
2. Empfänger
3. Abhörer

Die Aufgabe ist folgende: du willst eine Nachricht von 1 zu 2 so verschicken, dass wenn sie 3 liest, er sie nicht versteht.

Es muss etwas geben was 1 und 2 von 3 Unterscheidet, denn ansonsten kann ja sowieso jeder alles lesen. Diese "Unterscheidung" ist oft eine Art "Schlüssel"

Du musst von folgendem ausgehen:
Der Abhörer weiß fast ALLES. Er kennt dein Programm in und auswendig, er kennt die Abläufe die ihr durchführt, er kennt alle algorithmen und auch alle beteiligten. Er kann auch alles sehen was ihr tut. Er hat auch genug Geld um sich die besten Supercomputer der Welt zu kaufen und euren Code so zu knacken.
Es gibt nur 2 dinge, die er nicht weiß: 1. Die Nachricht selbst (ansonsten wäre alle mühe vergebens) und 2. den Schlüssel.
Wieso muss man davon ausgehen? Alles was ihr tut kann man nachvollziehen. Mit einigem Aufwand kann man aus Maschinencode ungefähr herausfinden, was das Programm tut. Man könnte euch bei euren Abläufen beobachten und man könnte eure Algorithmen nachvollziehen.

Deswegen

Shrax hat geschrieben:Ich hab in der Schule nur als Beispiel mir n kleinen Schlüssel ausgedacht.

das Alphabet:
ABCDEFGHIJKLMNOPQRTUVWYXZ

Jetzt tausche ich das etwas aus:
ABCDEFGHIJKLMNOPQRTUVWYXZ
ZYVTQOMKIGECABDFHJKNPRUWX
Was ja dann der Schlüssel wäre.


das wäre nach der oberen Annahme nicht der Schlüssel, sondern Teil des Algorithmus. Der Abhörer kennt den!
Ja, da hast du recht und das ist mir auch klar.
Wir wollen keine wichtigen Documente da verschlüsseln sondern nur in z.B nem chat wo mehrere sind, oder auf seiten wo wir sind (z. B. Schüler.cc) oder auf lan partys wenn wir nachrichten schreiben oder so.

Sollte ihn wirklich jemand knacken dann geh ich hin sag Glückwunsch und das wars^^
Also es ist kein Beinbruch wenns wer rausbekommt. Doch natürlich werde ich versuchen es so sicher wie möglich zu machen. Das Programm werde nur ich und er haben.


I
ch hab nen gegenvorschlag:
Schreibt doch ein simples XOR verschlüsselungsprogramm.
XOR heißt "Ausschließendes Oder" und ist der lieblingsoperator der Kryptographen ;-)
Es wird auf zwei Bits angewendet, und produziert ein drittes je nachdem ob die beiden ersten gleich waren oder nicht:

0 XOR 0 = 0 Die beiden waren nicht verschieden
1 XOR 1 = 0 Die beiden waren wieder nicht verschieden
1 XOR 0 = 1 Die beiden waren verschieden
0 XOR 1 = 1 Die beiden waren wieder verschieden


Nun, wie wendet ihr das auf euer Programm an? Buchstaben in eurem Programm sind nur Zeichen, und diese Zeichen sind in wirklichkeit eine Zahl. Und zwar so eine Zahl, die als folge von Bits abgespeichert ist. Wenn ihr einen Schlüssel (also eine Zahl) habt, dann XOR't ihr einfach jedes Bit des schlüssels mit jedem Bit der Nachricht, und kriegt so eure verschlüsselte nachricht heraus.
Und wie gehts wieder zurück? Ganz einfach, XOR't die verschlüsselte Nachricht wieder mit dem Schlüssel. Das XOR hat nämlich eine Nette eigenschaft: XOR't man das ergebnis mit einer der beiden eingangswerte kommt der andere anfangswert hinaus. Nehmen wir die oberen operationen, und sagen wir, dass das erste Bit eure nachricht ist, das zweite der schlüssel und die verschlüsselte nachricht. Dann XOR'en wir wieder das ergebnis mit der zweiten zahl um die erste zu bekommen:

0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0

Tataa, schon habt ihr auf der rechten seite (als Nachricht) wieder das was auf oben auf der linken seite Stand.

Ich hoffe ich habe mich verständlich ausgedrückt... Ansonsten nachfragen.
Dass hört sich sehr Interesannt an! Und ist sicherer als ich zuerst vor hatte. Ich bin von Morgen bis Mittwoch mit ihm auf ner Lan da geh ich das mal mit ihm durch.

Meine C Kentnisse die bisher nur sehr klein sind reichen dafür wahrscheinlich noch nicht aus aber ich werde es eben so lange Probieren und nachforschen wie ich kann.

Das Erinnert mich wie ich Batch lernen wollte. Auch wenn Batch nicht schwer ist und keine richtige Syntax hat habe ich anfangs nur gewusst wie man so n Shutdown scherz schreibt. Dann wollte ich mehr funktionen und bin stück für stück weitergekommen durch Googlen und hatte dann ein Schönes Kontroll Panel mit dem ich Diverse Backups machen konnte, usw...


Was ich aber noch nicht verstehe ist wie man ein einfaches Fenster erzeugt wo zwei eingabe flächen sind. In dem Buch C von A bis Z kommen bisher nur Konsolenprogramme dran. Diese laufen auf windows ja alle in der MS DOS Eingabeaufforderung ab. Aber wie man n einfaches Fenster erzeugt weis ich nicht *-*

Muss da mal Googlen. Vieleicht weis ja von euch einer n Ansatz. (Brauch keinen COde nur wie das ungefähr geht).

Ich hab nen gegenvorschlag:
Schreibt doch ein simples XOR verschlüsselungsprogramm.
XOR heißt "Ausschließendes Oder" und ist der lieblingsoperator der Kryptographen ;-)
Es wird auf zwei Bits angewendet, und produziert ein drittes je nachdem ob die beiden ersten gleich waren oder nicht:

0 XOR 0 = 0 Die beiden waren nicht verschieden
1 XOR 1 = 0 Die beiden waren wieder nicht verschieden
1 XOR 0 = 1 Die beiden waren verschieden
0 XOR 1 = 1 Die beiden waren wieder verschieden
Hat vieleicht jemand den Source code eines solchen Programmes, damit ich mir das etwas anschauen könnte? Vieleicht würde das beim begreifen wie man das codet Helfen!



Ich bedanke mich für die Beiträge. Ich finde das Forum echt Super!


mfg
Shrax

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Einfache Verschlüsselung C Einstieg

Beitrag von Jside » Do Feb 19, 2009 7:30 pm

eine Xor funktion sowie andere IC Gate funktionen gibt es auf meiner Website unter "Downloads".

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Einfache Verschlüsselung C Einstieg

Beitrag von Xin » Do Feb 19, 2009 7:51 pm

Shrax hat geschrieben:Bevor ich das mache würde ich gerne Wissen wie schwer das eigentlich ist wo ich mir vorgenommen habe.
Es ist nicht sonderlich schwer, wenn Du mit Arrays klarkommst.
Derartige Verschlüsselungen mache ich in der Regel als Übung mit den Leuten, denen ich C beibringe. Es ist eine sehr schöne Übung.
Shrax hat geschrieben:Und dann mache ich kleine zahlen davor die bedeuten dass man bei der ersten zahl z. B. ² 2 Buchstaben vor und bei ²³ Zwei vor und 3 zurück geht.
Kurz: man geht eins zurück!?

Warum machst nicht einfach eine Tabelle, in der Du die Zeichen austauschst?
Shrax hat geschrieben:Ich dachte mir jetzt das ich von diesen Leichten Verschlüsselungen 5 Verschiedene mache.
Ich sag ihm dann vorher welchen wir benutzen, und dann bekommt er und ich das Programm und wir können unsere Texte Verschlüsseln.

Also ein Programm wo ich einen von 5 von mir Festgelegte schlüsseln wähle, den Text einkopier und er mir dann den Klartext zeigt.
Lern noch ein wenig und schau Dir mal die Enigma an. Dort sind auch einfache Chiffren kurz beschrieben, die Du ebenso implementieren kannst.
Shrax hat geschrieben:Jetzt wollte ich mal fragen ob so ein Programm ein ding der unmöglichtkeit für einen der C lernt ist oder ob sowas zu machen wäre.
Die Frage ist falsch gestellt... Du lernst nur, wenn Du Dinge machst, die Du vorher nicht kannst.
Einfache Verschlüsslungsalgorithmen sind - wie schon geschrieben - sehr schöne Übungen um C zu lernen. Halte ich für ein gutes Thema.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten