eigene Codierung

Ich beschäftige mich noch nicht sehr lange mit Codierungen dennoch hab ich versucht einen eigenen Algorithmus zu schreiben, der einen Text mit Hilfe eines PW codiert.
Mich würde es interessieren, wie sicher diese Codierung ist.
Versucht bitte folgenden String zu decodieren.
Das PW besteht nur aus Buchstaben und ist 6 Zeichen lang.
Code:
?x?~?~Ô?}§w?7?çw????;kár?m?Ö ???=
Ihr dürft alles benutzen was notwedig ist
 
Oh sorry mir war nicht klar, dass es so nicht geht.
Welche Informationen würden weiterhelfen?
Das Passwort oder der Algo?

Ok hier ist der Algorithmus. Es ist eine Procedur geschrieben in PureBasic:
Code:
Procedure.s LS_CodeText(Text.s, Passwort.s) ; Codiert einen Text  
  Len_Text.l = Len(Text.s)
  Len_Passwort.l = Len(Passwort.s) 
  FingerPrint.l = 0
  For i = 1 To Len_Passwort
    FingerPrint + Asc(Mid(Passwort, i, 1))
  Next 
  RandomSeed(FingerPrint)
  text_out.s = ""
  str_counter.l = 1
  For i=1 To Len_Text
    For n=1 To Len_Passwort
      If str_counter > Len_Passwort
        str_counter = 1
      EndIf 
      zeichen.b = Random(Asc(Mid(Passwort, str_counter, 1)))
      str_counter + 1
      Byte.b = Asc(Mid(Text.s, i, 1)) 
      Byte.b + zeichen.b
    Next
    text_out.s = text_out.s + Chr(Byte.b) 
  Next
  ProcedureReturn text_out.s
EndProcedure

Ich hoffe der Code ist auch für Benutzer von anderen Spachen verständlich.
Wenn nicht bitte nachfragen.
 
Wenn Du Dich für die Sicherheit des Verfahrens interessierst - im "Cryptography & Encryption" den Algo freigeben und hoffen, dass jemand sich die Zeit dafür nimmt ;).
Ansonsten noch: mehr verschlüsselten Text - eventuell kann man es schon automatisiert mit Cryptoll entschlüsseln. Und da es hier offenbar über den darstellbaren ASCII-Wertebereich geht (komische ASCII-zeichen) wäre es besser, die verschlüsselte Datei anzuhängen, weil man sonst je nach benutzer Schrift bzw wegen dem Browser/Server falsche Ergebnise zu sehen bekommt.
 
Hallo eXol,

Dein Algorithmus funktioniert (vereinfacht) wie folgt :

1. Wert = PasswortZeichen + ZufallsWert.

2. OriginalTextZeichen + Wert = VerschlüsseltesTextZeichen.

Da der Wert einen Zufallswert enthält, wirst Du eine verschlüsselte Datei trotz Passwort nicht wieder entschlüsseln können.
 
Da der Wert einen Zufallswert enthält, wirst Du eine verschlüsselte Datei trotz Passwort nicht wieder entschlüsseln können.
wenn das Basic"zeug" so funktioniert, wie in anderen Sprachen, sollte er auch entschlüsseln können - da der Seed immer vom Passwort abhängt.

Ein interessanter Ansatz - allerdings habe ich mich noch nie mit Cryptographie beschäftigt und kann leider nicht sagen, in wiefern es etwas "taugt". Als ich mal einige Artikeln zu Pseudo-Random-Algorithmen gelesen habe, stand da auch ausdrücklich, dass nicht jeder "Pseudo-Random-Algo" für Verschlüsselungen verwendet werden sollte bzw. dass da ganz andere Kriterien gesetzt werden.(Was jetzt die Kriterien und Angriffspunkt sind, die sich dadurch ergeben - das wüsste ich auch gern ;) ). Auch entsinne ich mich an einen Beitrag bei Buha, wo jemand duch einen Implementierungsfehler in Java-Random-Prozedur aus einigen Angaben den Seed brechnen konnte und damit dann immer die nächsten Zufallszahlen - leider ist es schon etwas her, so dass ich den Artikel nicht finde.
 
http://www.purebasic.com/german/documentation/misc/randomseed.html

^^^ hmm, hab' nicht sorgfältig recherchiert.

Natürlich wird eine verschlüsselte Datei mit dem Passwort wieder entschlüsselt.

Ohne das Passwort wird "Cryptool" aber keine Hilfe sein. Damit lassen sich nur "symmetrisch" verschlüsselte Dateien entschlüsseln.

Aber bei diesem Algorithmus kannst Du sicher sein, dass sich im verschlüsselten Text nichts "auffälliges" wiederholt.

Allerdings steht und fällt alles mit der Arbeitsweise von RandomSeed() und Random().

Der "MySQL" - Server benutzt deshalb z.B. einen selbstgeschriebenen Zufallsgenerator (Zeile 00079 :-) ) :

http://leithal.cool-tools.co.uk/sourcedoc/mysql509/html/libmysql_2password_8c-source.html
 
Das bedeutet also, dass die verschlüsselten Daten rel. sicher sind, solange das Passwort nicht bekannt ist!?

Hab vor Kurzem festgestellt, dass der Seed rel. klein (<1000) bei dem verwendeten PW ist.
Man könnte also alle Seedwerte von 0-x durchgehen und prüfen ob dabei ein Text rauskommt und so das ganze entschlüsseln.
Habt ihr vielleicht einen Vorschlag, wie ich diesen Algo verbessern kann?
 
Hallo eXol,

wenn Du Deinen Algorithmus verbessern willst, dann hier nur einige Hinweise :

Ein guter Verschlüsselungsalgorithmus hat für meine Begriffe nur zwei Kriterien :

1. Ein Hacker muss gezwungen sein, alle denkbaren Möglichkeiten auszuprobieren.

2. Die Rechenzeit zur Verschlüsselung eines Zeichens muss "so lange wie möglich" sein.

zu 1.:
Durch die Verwendung von RandomSeed() und Random() wird dieses Kriterium bereits erfüllt.

Allerdings lässt sich die Anzahl der Möglichkeiten vereinfacht durch folgende Formel darstellen :

FingerPrint * (WertebereichDerPasswortZeichen HOCH Passwortlänge).

-> erhöhe den FingerPrint durch z.B. ein Polynom höheren Grades :

(PWZeichen ^ 3) + (PWZeichen ^ 2) + 12345 (oder so ähnlich)

(z.Zt. beträgt der FingerPrint nur alles zwischen WertKleinstesPasswortZeichen und (Passwortlänge * WertGrösstesPasswortZeichen) ).

-> erziehe die Nutzer Deines Programms dahingehend, dass sie sich verdammt noch mal gefälligst laaaaange Passwörter ausdenken.

zu 2.:
Dieses Kriterium unterliegt nur den Gesetzen der Phantasie. Allerdings ist mit "langer Rechenzeit" NICHT gemeint, dass Warteschleifen eingebaut werden.

-> lasse meinetwegen die innerste For-Schleife 1,3,10,100,1000 mal durchlaufen

-> finde einen Kompromiss zur folgenden Behauptung :

Wenn der Algorithmus "ewig" braucht um ein Zeichen zu verschlüsseln, dann braucht auch ein Hacker "ewig" um das Zeichen wieder zu entschlüsseln.

Hoffentlich hilft Dir das.

Ach so, wie bist Du eigentlich auf "PureBasic" gekommen ?
 
Danke für deine schnelle Antwort.
Ich hab mir gedacht ich mache ein MD5 Fingerprint vom Passwort und anschließend berechne ich aus dem MD5 den Seed-Wert.
Mein Algo so wie er jetzt ist braucht ca 2 Sec um 1000000 Zeichen zu verschlüssel.
Da ich diese Verschlüsselung für mein Chat-Programm brauche, das ich gerade programmiere, kann ich ruhig die Schleife mehr als 10 mal wiederholen.
Das würde dann trotzdem schnell genug gehen bei einem String, der max. 4000 Zeichen lang sein darf.

Ach so, wie bist Du eigentlich auf "PureBasic" gekommen ?

Hab vor ca. 1.5 Jahren nach einer guten Programmiersprache gesucht.
Nachdem ich BlitzBasic, Blitz3D, VisualBasic, Profan?, C und C++ probiert habe,
hab ich eine Demoversion von Purebasic entdeckt und war sofort begeistert.
PureBasic erfüllte zu 100% meine Anforderungen.
Es ist schnell (gleich bzw. schneller als C++)
Die .exe sind sehr klein.
Die Syntax ist nicht Cryptisch wie bei C++ und das garantiert schnelle Erfolge.
PB ist für Anwendungen mit einer GUI und für Spiele in 2D und 3D gut geeignet.
Man kann die WinAPI direkt ansprechen.
Mit PB kann man direkt ASM (FASM) benutzen.

Purebasic ist günstig (unter 100 Euro) und wird ständig weiterentwickelt.
Und das Beste, man hat eine lebenslange Updateberechtigung.
Als ich mir PB gekauft habe, hatte ich die Version 3.30 und jetzt ist 4.00 rausgekommen. Selbst Wenn PB die Version 10 erreicht, kann ich diese Version ohne zusatzkosten runterladen.
Sorry für den langen Text aber ich liebe PB ;)
 
was ich als nachteil ansehen würde ist
bei c/c++ gibt es viele kostenlose compiler
man kann sich alles seinen wünschen anpassen
läuft unter allen betriebsystemen

soll jetzt keine abwertung von purebasic sein (mit pb hab ich nämlich noh nicht programmiert), aber du kannst den source kaum mit anderen austauschen, weil die meisten warscheinlich c/c++ benutzen.
 
Kannst du mir den besten kostenlosen compiler für C++ nennen?
Wollte mich mal wieder ein bischen mit C++ beschäftigen.

Es gibt 2 große Boards für PureBasic einer englisch und einer deutsch.
Auf diesem Board, da hast du recht, wird bestimmt niemand PureBasic kennen/benutzen.

Probier doch mal die Demo von PureBasic aus:
http://www.purebasic.de/demo.shtml

Die gibt es für Windows, Linux und MacOS X

Nur mal als Demonstartion was man mit PureBasic in wenigen Tagen machen kann:
http://purefrogger.pu.ohost.de/Programme_HTML/NotEx.php

Die erste Version von NotEx hab ich in nur 2 Stunden (incl. GUI) programmiert.
In den Anderen versionen kamen nur sonderwünsche von den Usern von NotEx rein.
Mit C++ würde das wesentlich länger dauern und wegen der Syntax würde die Fehlersuche auch viel Zeit verschwenden.
 
Zurück
Oben