[Lua] Mein eigener Verschlüsseler

Hastumer

Umarmt Bäume.
Nachdem irgendwie die anderen Projekte alle ins Wasser gefallen sind, hab ich mich dazu entschlossen, diesmal etwas WIRKLICH zuende zu bringen. Ich mache meinen eigenen Verschlüsseler! Das Prinzip ist eigentlich ganz einfach:
Wir haben eine Datenbank mit allen Symbolen, die einen festen numerischen Wert zugewiesen kriegen, jedoch darf dieser Wert keine Null in sich haben. Heißt:
Code:
1 = a, 2 = b, 3 = c, 4 = d, 5 = e, 6 = f, 7 = 1, 8 = 2, 9 = 3, 11 = 4, 12 = 5, 13 = 6, 14 = 7, 15 = 8, 16 = 9, 17 = 0, 18 = g, 19 = h, 21 = i, usw.
Jetzt fragt ihr euch vielleicht: "Aber wieso erst a-f, dann die Zahlen, und dann erst die anderen Buchstaben? Eigentlich ganz einfach: Ich arbeite mit einer Funktion in Lua, die mir die Hexadezimalen Zahlenwerte gibt. Das heißt: Ich kann Programme kleiner verschlüsseln! Diese Zahlenwerte werden allerdings nicht bei Textdateien wiedergegeben, deswegen muss ich auch die anderen Symbole in die Datenbank schreiben.
Jedes Symbol in der Datei wird durch die Datenbank gezogen und mit dem dazugehörigem Zeichen ersetzt, es wird eine Null dahintergesetzt und der Spaß beginnt von vorne. (Also rekursiv, bis das Programm durch ist.) Dann kommt Mathe zum Einsatz:
Es wird immer die Differenz von den Werten gebildet (Nur der erste Wert ist der ursprüngliche Wert.), wenn zwei Werte hintereinander gleich sind, wird einfach nur 00 geschrieben, also keine Zahl. Beispiel:
Wir haben den String "1337abc". Der soll jetzt verschlüsselt werden. Also gucken wir in der Tabelle nach, welchen Wert die jeweiligen Symbole haben (Siehe oben). 1 = 7, 3 = 9, 3 = 9, 7 = 14, a = 1, b = 2, c = 3.
Schreiben wir jetzt die Werte in der oben genannten Notation auf, sieht das ganze folgendermaßen aus:
Code:
70909014010203
Jetzt müssen wir aber noch die Differenzen bilden:
Code:
Erst schreiben wir "70", dann rechnen wir 7-9, das ist -2, also "70-20", 9-9 = 0, also "70-200" usw..
Der fertige String lautet also dann:
"[I][U]70-200-5013010-10-1[/U][/I]"
[/SPOILER]
Wenn ihr das jetzt entschlüsseln wollt, macht ihr einfach den ganzen Scheiß rückwärts!
[SPOILER]"70-200-5013010-10-1" war ja unser verschlüsselter String.
Dann rechnen wir: 
7-(-2) = 7+2 = 9, Also "7090". Dann kommt 9-0 = 9, also "7090", und so weiter.
Und dann kriegen wir wieder unseren nicht fertigen String "70909014010203", den schicken wir jetzt wieder durch die Datenbank, und zack, wir kriegen wieder unsere Nachricht "1337abc" heraus!
[/SPOILER]
So funktioniert das im groben. Ich will außerdem noch mehrere zufällig genommene Datenbanken machen, wo dann am Anfang per Passwort (Hashseed) dann die Datenbank genommen wird, womit es verschlüsselt wurde. Heißt: Das wird ein Projekt, was lange dauern wird!

Falls es Symbole gibt, die die Datenbank [B]nicht[/B] kennt, wird das Symbol einfach so, wie es war, hingeschrieben (auch von Nullen umgeben)
[/SPOILER]
Ihr könnt mir auch gerne Datenbanken einschicken! Ich werde später noch alle Symbole hier reineditieren, die vorhanden sein müssen.
Format der Datenbanken:
datenbank = {{"a","1"},{"b","2"}}, usw, erst das Symbol, dann der Zahlenwert. "datenbank" ist austauschbar, logischerweise! Wenn ihr mir eine Datenbank einschickt, werdet ihr natürlich im Programm erwähnt. (Nur, wenn die Datenbank genommen wird, es wird dann oben in etwa stehen: "Datenbank eingereicht von XYZ"
Danke, dass ihr euch Zeit genommen habt, meinen langen Text zu lesen, ich freue mich immer über Verbesserungsvorschläge!
 
Algorithmen selbst entwickeln finde ich immer toll, allerdings:

Wie willst "16" von "1"."6" unterscheiden ? Ich weiß nicht, wie das in Lua ist, aber ich finde es immer schwierig, mit Strings zu "rechnen".
Da der Algorithmus linear mit Schlüssel (der Datenbank) und Klartext arbeitet, läßt sich das auch leicht umgekehrt machen, um den Schlüssel zu errechnen, insbesondere, wenn Du Klartextzeichen so stehen lässt.
Falls Du Dir zum Vergleich mal andere Verschlüsselungsalgorithmen anschauen möchtest, empfehle ich den Quelltext von mcrypt.
Dieses Tool ist nicht nur opensource sondern sogar produktiv im Einsatz :) .
Ich habe da aber auch noch nie reingeguckt, also weiß ich nicht, ob das C, Python oder Perl ist.
Zumindest in Python gibt es zudem für viele populäre und historische Verschlüsselungsalgorithmen fertige Bibliotheken.
Salt zu verwenden, empfiehlt sich immer:
Stackoverflow
Ansonsten gibts ja noch CrypTool, in dem man unter Kommerz-OS den Ablauf eines vorhandenen Algorithmus anschauen kann.

Ich glaube du hast so eine Art multilineare Caesar-Chiffre konstruiert, aber da bin ich mir nicht sicher.
 
Zuletzt bearbeitet:
Oben