Eigenen Algorithmus



  • Hallo Leutz.
    Wisst ihr, wie man einen eigenen Verschlüsselungs-Algorithmus schreiben kann? Das soll nichts hochkomplexes werden, aber auch nicht so etwas, wo jedes Zeichen immer durch ein anderes gleiches Zeichen erstezt wird (z.B ABCABC wird zu DEFDEF). Also ich habe wirklich absolut keine Idee, wie man so etwas realisieren kann.

    Mfg Ominion



  • Zuerst einmal brauchst Du etwas mathe Kenntnisse und dann ist es eigentlich wie jeder andere Algorythmus auch...



  • void crypt(char* start,char* end,int key){
       srand(key);
       for(char* pos=start;pos!=end;++pos)
          *pos^=rand();
    }
    


  • @Volkard: Kannst du mir diesen Teil bitte erklären?

    for (char* pos = start; pos != end; ++pos)
    *pos ^= rand ();
    

    Also im Kopf wird die Variable pos deklariert und gleichzeitig abgefragt, ob pos der übergebenden Variablen start entspricht. Als nächstes kommt die Bedingung, dass pos nicht gleich der Variablen end sein darf. Und dann wird ein char inkrementiert? In der Schleife wird dann der Zeiger won pos mit einem Zufallswert multipliziert.
    Habe ich das jetzt soweit richtig verstanden?

    Mfg Ominion



  • Von den Verschlüsselungsalgorithmen ist z. B.TEA die Variante XTEA ganz einfach zu implementieren (nur wenige Zeilen) und trotzdem sehr sicher. Du findest zahlreiche frei verfügbare Musterimplementierungen im Netz.

    Warum also selbst einen schlechten Algorithmus sich ausdenken und debuggen?



  • Also meinen Erfahrungen nach, fährt man immer besser, wenn man etwas selbst kann bzw. weiß wie es geht. Außerdem möchte ich lernen, und nicht bei jeder Kleinigkeit das "paste & copy" - Verfahren benutzen.

    Mfg Ominion



  • Ominion schrieb:

    Habe ich das jetzt soweit richtig verstanden?

    Ja. Du solltest noch beachten, warum die Zufallswerte wegen des srand-Aufrufs nicht wirklich zufällig sind.

    Nachtrag: ^= bedeutet nicht Multiplikation, sondern XOR.



  • Ominion schrieb:

    Also meinen Erfahrungen nach, fährt man immer besser, wenn man etwas selbst kann bzw. weiß wie es geht. Außerdem möchte ich lernen, und nicht bei jeder Kleinigkeit das "paste & copy" - Verfahren benutzen.

    Mfg Ominion

    Ich glaub du stellst dir das alles etwas zu einfach vor. Ich will dir ja nicht zu nahe treten, aber glaubst du allen Ernstes einen vernünftigen Verschlüsselungsalgorithmus zu programmieren sei eine "Kleinigkeit" und das man nichts lernt, wenn man sich anschaut, wie bestehende Verschlüsselungsalgorithmen funktionieren? Mit deinen C Kenntnissen zumindest scheint es ja nicht weit her zu sein, wenn ich mir mal deine Erklärung zu Volkards for Schleife durchlese...



  • Und wenn es dich wirklich interessiert, wie so etwas funktionier dann schau einfach mal auf Wikipedia vorbei oder such auf Google. Da findest du massig Verschlüsselungsalgorithmen, schau sie dir halt an und schau ob und in wie weit du sie nachvollziehen kannst. Wenn du dann dazu konkrete Fragen hast, kannst du ja nochmal wiederkommen.



  • fsdfsdf schrieb:

    Ich glaub du stellst dir das alles etwas zu einfach vor. Ich will dir ja nicht zu nahe treten, aber glaubst du allen Ernstes einen vernünftigen Verschlüsselungsalgorithmus zu programmieren sei eine "Kleinigkeit" und das man nichts lernt, wenn man sich anschaut, wie bestehende Verschlüsselungsalgorithmen funktionieren? Mit deinen C Kenntnissen zumindest scheint es ja nicht weit her zu sein, wenn ich mir mal deine Erklärung zu Volkards for Schleife durchlese...

    und genau deswegen erwarte ich, daß du ihn nicht niedermachst. wir alle haben mal angefangen. irgendwie lese ich in letzter zeit zu oft in diesem forum, wie einäugige auf blinden rumhacken.

    außerdem hat er explizit nach nem eigenen algo gefragt und nach was nicht hochkomplexem. und der art der frage nach, war ich irgendwie sicher, daß er eigentlich lernen will. die empfehlung, sich bekannte einfache algos anzugucken ist sicherlich gut, aber bitte alles zu seiner zeit.

    for (char* pos = start; pos != end; ++pos)
       *pos ^= rand ();
    

    ist gleich

    char* pos;
    for (pos = start; pos != end; ++pos)
       *pos ^= rand ();
    

    ist gleich

    char* pos;
    pos = start;
    while(pos != end){
       *pos ^= rand ();
       ++pos;
    }
    

    ist gleich

    char* pos;//das ist ein zeiger auf char
    pos = start;//und zeigt jetzt dahin, wo start hinzeigt
    while(pos != end){//solange pos nicht dahinzeigt, wo end hinzeigt
       *pos ^= rand ();//verfummle das, wo pos hinzeigt
       ++pos;//lass pos eins weiter zeigen
    }
    

    und das verfummeln ist deswegen nachvollziehbarm weil rand() immer die gleiche zahlenfolge liefert. man kann aber steuern, wo die zahlenfolge beginnt mit srand(). deswegen hab ich den key vorher in srand() gestopft.

    ich sage nicht, daß der algo nun fürchterlich gut ist, aber es ist, denke ich, ein guter weg, um tiefer in die materie einzudringen. andererseits, die ganzen scriptkiddies sind schon überfordert damit (solange kein chiffrat mit zugehörigem plaintext vorliegt). wenn sagen wir mal zweimal chiffrat mit plaintext vorliegen, kann man leicht die zufallszahlenfolge extrahieren (einfach chiffrat^plaintext) und sie ist gleich und das ist doof.



  • ich mach ihn ned runter aber das winapi forum ist kein forum für leute die gerade ihre ersten schritte machen. dafür ist wenn schon ansi c da oder ein andere forum.



  • Aha.

    Ein Forum ist da, damit man helfen kann oder gehelfen wird. Also solange in der Beschreibung nicht steht "Ausschließlich für Studierte" werde ich dieses Forum auch weiter nutzen.

    @Volkard: Ich habe mich jetzt bei der Variablen start verfangen. Ich habe nicht gesehen, dass das auch ein Zeiger ist. Deshalb habe ich bei der Zuweisung pos = start gedacht, dass pos jetzt eben auch ein gewöhnlicher char ist und habe mich bei der inkremeniterung gefragt, seit wann man das mit chars machen kann.

    Mfg Ominion



  • Ominion schrieb:

    gedacht, dass pos jetzt eben auch ein gewöhnlicher char ist und habe mich bei der inkremeniterung gefragt, seit wann man das mit chars machen kann.

    oh. vieleicht ist dir bei den zeichen was entgangen.
    http://www.volkard.de/vcppkold/zeichen.html
    man kann mit char genauso rechnen, wie mit jedem anderen int auch. das ist hilfreich für viele verschlüsselungsverfahren.



  • Das ist mir wohl wirklich entgangen. 😞

    Mfg Ominion


Log in to reply