Einfache Verschlüsselung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Einfache Verschlüsselung

    Erst mal der Quelltext

    PHP-Code:
    <?php
    $klartext 
    "Dies ist der Klartext";

    $passwort "passwort";


    function 
    encode($key$text)
    {
        
    $l_k strlen($key);
        
    $l_t strlen($text);
        
        if(
    $l_k == 0) return $text// Ohne Key keine Verschlüsselung!!!
        
        
    $encoded "";
        
    $k 0// Position im Key
        
    for($i=0$i<$l_t$i++)
        {
            if(
    $k $l_k$k 0// Wenn ende des keys, dann wieder von vorne
            
    $encoded .= chr(ord($text[$i]) ^ ord($key[$k])); // Verschlüsselung
            
    $k++;
        }
        return 
    $encoded;
    }

    function 
    decode($key$chiffre)
    {
        
    $l_k strlen($key);
        
    $l_t strlen($chiffre);
        
        if(
    $l_k == 0) return $text// Ohne Key keine Verschlüsselung!!!
        
        
    $decoded "";
        
        
    $k 0// Position im Key
        
    for($i=0$i<$l_t$i++)
        {
            if(
    $k $l_k$k 0// Wenn ende des keys, dann wieder von vorne
            
    $decoded .= chr(ord($chiffre[$i]) ^ ord($key[$k])); // Verschlüsselung
            
    $k++;
        }
        
        return 
    $decoded;
    }

    $encoded encode($passwort$klartext);
    $decoded decode($passwort$encoded);

    echo 
    '<p><b>Klartext:</b> '.$klartext.'</p>';
    echo 
    '<p><b>Schl&uuml;ssel:</b> '.$passwort.'</p>';
    echo 
    '<p><b>verschl&uuml;sselt:</b> '.$encoded.'</p>';
    echo 
    '<p><b>Klartext, mit decode():</b> '.$decoded.'</p>';
    ?>
    Zuletzt geändert von MaxP0W3R; 21.02.2005, 04:08.


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

  • #2
    Ein paar Anmerkungen

    Ja, decode und encode sind eigentlich gleich, wurden der Übersichtlichkeit halber doch "aufgetrennt" damit man im Quelltext erkennen kann, was man gerade macht

    Ja, das Bitweise XOR hat den Ruf der Kiddie Verschlüsselung, aber das liegt nur an der falschen Benutzung dieser Verschlüsselung




    Die hier vorliegende Verschlüsselung kann für sehr kurze Texte benutz werden, z.B. für Passwörter.
    Man merkt sich ein sicheres Passwort und verschlüsselt damit viele andere Passwörter.

    Da Passwörter eher kurz sind, ist es schwer, ohne den Schlüssel ran zu kommen.


    Der Schlüssel, mit dem man seine Texte/Passwörter verschlüsseln möchte, sollte eine zufällige Zeichenfolge sein, welche so lang ist wie der längste Text bzw. das längste Passwort...


    Aufgrund der Kürze fällt eine Sprachanalyse komplett weg und Brute force bringt auch nichts, da mit ja nicht weiss, wann man das Passwort entschlüsselt hat, somit müsste man jedes Passwort ausprobieren und damit würde man also wieder Brute Force am ursprünglichen System benutzen müssen...


    Ich möchte diese Funktion verwenden, um auf einem Server in einer MySQL Datenbank Passwörter mittlerer Sensibilität (z.B. von Fore, E-Mail Postfächern) zu speichern.
    Man merkt sich einen Schlüssel und speichert und verschlüsselt damit beliebig viele.


    Wie gesagt, da die Passwörter keine echten Texte sind und der Schlüssel genau so lang wie das längste Passwort ist, sollte es nahezu unmöglich sein, an die Passwörter heranzukommen....



    Wenn man einen text mit einem genauso langen schlüssel, der 100% zufällig ist (also nicht mit rand() erzeugt ) dann ist es unmöglich diesen Text zu entschlüsseln.
    Wie sich dass nun verhält, wenn man sich selbst einen schlüssel ausdenkt und damit sehr kurze texte verschlüssekt weiss ich nicht.

    hat da jmd. von euch eine ahnung ?
    Zuletzt geändert von MaxP0W3R; 21.02.2005, 04:09.


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

    Kommentar


    • #3
      Hier die Beschreibung, wie man eine Xor verschlüsselung knack, allerdings muss wohl der schlüssel kürzer sein als der text und der text sollte schon gross sein (1 din a 4 seite)

      XOR stellt im Prinzip einen einfachen symmetrischen Algorithmus dar, da die zweifache Anwendung des Algorithmus das Orginal wiederherstellt. Allerdings bietet XOR allein keinen zuverlässigen Schutz, da die Verschlüsselung leicht zu knacken ist. Dazu geht man folgendermaßen vor:

      1.
      Man ermittelt die Schlüssellänge anhand einer Koinzidenzerfassung10. Dieses Verfahren funktioniert folgendermaßen: Man XOR-verknüpft den Ciphertext mit sich selbst, wobei man die Kopie um einige Bytes verschiebt. Dann vergleicht man, wieviele Stellen gleich geblieben sind. Beträgt die Verschiebung ein Vielfaches der Schlüssellänge, sind etwas über 6 % gleich. Ansonsten sind es weniger als 0.4 %. Das lässt sich damit begründen, dass eine Stelle A mit sich selbst XORverknüpft wieder A ergibt (0 XOR 0 = 0) und sich der Schlüssel immer wiederholt. Die kleinste Verschiebung, die ein Vielfaches der Schlüssellänge ergibt, ist die Länge des Schlüssels.
      2.

      Man verschiebt den Chiffretext um diese Länge und XOR-verknüpft ihn mit sich selbst. Da XOR eine symmetrische Funktion ist, wird der Schlüssel beseitigt und es verbleibt der Klartext, XOR verknüpft mit dem um die Schlüssellänge verschobenen Klartext. Durch eine sogenannte Redundanzanalyse8 lassen sich dann Muster, beispielsweise sich wiederholende Wörter, hervorheben und der Orginaltext zurückgewinnen.9
      Doch leider ist die Verschlüsselung so unsicher wie sie schnell ist. Man braucht lediglich die Länge des Schlüssels. Dann kann man den Text um die Länge des Schlüssels verschieben und dann mit sich selbst per XOR verknüpfen - und der Schlüssel entfernt sich selbst. Nun muss man nur noch etwas kombinieren, denn übrig bleibt nur noch eine XOR-Verknüpfung zwischen dem Klartext und dem verschobenen Klartext (nicht Geheimtext!). Findet man zum Beispiel ein Zeichen, das aus acht Nullen besteht, weiss man das es sich um zwei gleiche Buchstaben handeln muss (es sind dann ja alle Bits gleich => alles 0). Auch auflösen kann man etwas, wenn das eine Zeichen ein Leerzeichen ist. Denn nur dann kann das dritte Bit auf 1 gesetzt sein. Verknüpft man dann das Zeichen mit 00110010 dann erhält man auch das zweite Zeichen. Wenn man nun bedenkt, wieviele Leerzeichen es in einem Text hat, dann sieht man, dass schon viel aufgedeckt wird. Wenn man dann noch ein wenig weiter kombiniert, ist der Klartext schnell entschlüsselt.
      Zuletzt geändert von MaxP0W3R; 21.02.2005, 04:19.


      An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

      Kommentar


      • #4
        muh, hier sitzen doch studierte, hat denn keiner (mehr?) ahnung von dem thema ? ^^


        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

        Kommentar


        • #5
          Original geschrieben von MaxP0W3R
          Wenn man einen text mit einem genauso langen schlüssel, der 100% zufällig ist (also nicht mit rand() erzeugt ) dann ist es unmöglich diesen Text zu entschlüsseln.
          Richtig

          Allerdings braucht der Empfänger ja den Schlüssel und wie kommt er da hin, ohne dass Eve ihn bekommt?

          Wie sich dass nun verhält, wenn man sich selbst einen schlüssel ausdenkt und damit sehr kurze texte verschlüssekt weiss ich nicht.
          Bestimmt nicht besser
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar

          Lädt...
          X