Ankündigung

Einklappen
Keine Ankündigung bisher.

Verschlüsselungs Funktion

Einklappen

Neue Werbung 2019

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

  • Verschlüsselungs Funktion

    Hallo alle zusammen.

    Ich habe dieses Thema schon Verschlüssel Funktion - Forum: phpforum.de hier angesprochen, leider keine für mich nützlichen Antworten bekommen. Nur, damit ich mich nicht eines Crosspostings schuldig mache

    Ich habe mich mal an einer Verschlüsselungsfunktion probiert. Diese basiert auf folgenden Prinzip: Der Text wird mit einen Schlüssel (unterschiedlich zwischen 1000-2500 Zeichen groß) verschlüsselt. Dazu wird der ASCII Code des Textes mit dem ASCII Code des Schlüssels addiert. Hat der Schlüssel sein Ende erreicht, wird er durch eine Anzahl, die durch den ANCII Code eines bestimmten Stringbuchstabens, neu zusammengewürfelt, indem der Hash im Prinzip Letzter_Buchstabe.Erster_Buchstabe._Vorletzter_Buc hstabe.Zweiter_Buchstabe usw. neu zusammengesetzt wird.

    Nun habe ich dazu zwei Fragen:

    1. Ist das sicher? (Ich hab da ziemlich starke Bedenken)
    2. Aus irgendeinen Grund wird der String bei Verschlüsselung und anschließender Entschlüsselung ab einen bestimmten Buchstabe (meistens ein ".", "ö" oder "ß") bei bestimmtes Schlüssel falsch decoded und es entsteht ein Buchstaben Wirr-Warr. Ich habe leider noch nicht rausbekommen warum das so ist bzw. was für ein Muster der Schlüssel dabei hat.

    PHP-Code:
            private function string_hash($text$wrap=""$return_number=FALSE$mode){
            
    $encoded="";
            if (empty(
    $this->key))    return FALSE;
                
    $key=$this->key;
                
    $n=0
                for (
    $i=0$i<strlen($text); $i++){
                    
    $key_ascii=ord(substr($key$n1));
                    if (!
    is_numeric($key_ascii) || $key_ascii===0){
                        
    $n=0;
                        
                        
    $max=strlen($key)/2;
                        for (
    $i2=1$i2<=ord(substr($key$i%55+substr($key, ($i%111), 1), 1))+($i%33); $i2++){
                            
    $new_key=$key;
                            for (
    $i3=0$i3<$max$i3++){
                                
    $new_key.=substr($key$i31).substr($key, -$i31);
                            }
                            
    $key=$new_key;
                        }
                        
                        continue;
                    }
                    if (
    $mode=="decode"){
                        
    $new_ascii=ord(substr($text$i1))-$key_ascii;
                        if (
    $new_ascii<=0){$new_ascii+=256;}
                    }else{
                        
    $new_ascii=ord(substr($text$i1))+$key_ascii;
                        if (
    $new_ascii>256){$new_ascii%=256;}
                    }
                    if (
    $return_number==FALSE)
                        
    $encoded.=chr($new_ascii).$wrap;
                    else
                        
    $encoded.=$new_ascii.$wrap;
                    
    $n++;
                }
                return 
    $encoded;
                
            } 
    PS: Ignoriert bitte die Parameter $wrap und $return_number, die hab ich nur zum Test mal eingefügt... einfach als nicht gesetzt betrachten.


  • #2
    Warum machst du es so kompliziert?? Wozu brauchst du die Verschlüsselung?

    Kommentar


    • #3
      Hmm, was meinst du mit, warum mache ich es so kompliziert? Ich bin dabei, eine Verbindung zwischen 2 Servern zu erstellen (localhost und ein externer), die dann aller 10 Sekunden ein bestimmtes Verzeichnis, welches auf beiden der Server vorhanden ist, vergleichen und ggf. bei untschiedlichen/fehlenden Datein übertragen - und das halt verschlüsselt (wofür die Funktion da ist). Der Schlüssel wurde vorher mit dem Diffie Hellman Schlüsselaustauschprinzip übertragen. Ich will hierbei aber keine vorgefertigten Verschlüsslungsfunktionen nehmen, da ich so eine kleine persönlich Herausforderung haben will

      Kommentar


      • #4
        Wie sicher dein Verfahren ist weiss ich nicht weil ich es nicht verstanden oder analysiert habe und es auch nicht vorhabe. Ich denke jeder hat schonmal ein kleines Skript geschrieben, mit dem Daten verschluesselt werden koennen, und sei es nur mit str_rot13.

        Auch posten ab und zu hier Leute ihre verschluesselten Texte um zu sehen ob es geknackt wird; das fuehrt meist zu falschen Schlussfolgerungen, wenn keiner dahinter kommt. Der Poster denkt sein Code waere sicher, aber es heisst lediglich, dass der Ansporn nicht hoch genug ist (mein Ansporn ein fremdes Skript zu knacken ist zum Beispiel relativ gering). Wenn damit aber wichtige Firmendaten uebertragen werden, steigt der Ansporn und du kannst sicher sein, sobald die Informationen wichtig genug fuer Profis werden, werden Skripte wie deines sehr sehr schnell geknackt.

        Oliver aus dem phpforum hat schon Recht, versuch es lieber mit einer bewaehrten Methode, die auch bei Offenlegung des Verschluesselungscodes und einer hohen Maschinenpower noch den Dechiffrierung standhaelt:

        Hier findest du eine fertige Klasse (ganz nach unten scrollen), fuer die du die PHP mcrypt-Extension benoetigst.
        PHP: Kreditkartenvalidierung - phpfriend.de

        Wenn man sich dein Skript nochmal genauer anschauen soll, formatier es bitte ordentlich und konsequent. Und vor allem kommentier es
        "Mein Name ist Lohse, ich kaufe hier ein."

        Kommentar


        • #5
          Ok hier das ganze noch einmal kommentiert:

          PHP-Code:
          <?php
              
          // Zum Verschlüsseln und Entschlüsseln eines Textes
              
          private function string_hash($text$mode){   
                  
          $encoded="";
                  
          // Wenn kein Schlüssel gesetzt wurde, abbruch (Fnkt. ist in einer Klasse)
                  
          if (empty($this->key))    return FALSE;    
                  
          // Speichert den Schlüssel in einer Variable, da er später verändert werden kann
                  
          $key=$this->key;    
                  
          // $n ist der Positionszeiger für den Schlüssel (später $i dann für den Text)
                  
          $n=0;     
                  
          // Durchläuft jedes Zeichen des zu verschlüsselnden Textes
                  
          for ($i=0$i<strlen($text); $i++){    
                      
          // Ascii Code von Schlüssel-Buchstabe
                      
          $key_ascii=ord(substr($key$n1));    
                      
          // Wenn Schlüssel zuende ist...
                      
          if (!is_numeric($key_ascii) || $key_ascii===0){    
                          
          $n=0;// Zeiger am Anfang ausrichten
                          
                          
          $max=strlen($key)/2;
                          
          // ord(substr($key, $i%55+ord(substr($key, ($i%111), 1), 1)))+($i%33) soll ein relativ zufälligen Wert darstellen, so oft wird dann der Schlüssel umgestellt
                          
          for ($i2=1$i2<=ord(substr($key$i%55+ord(substr($key, ($i%111), 1), 1)))+($i%33); $i2++){    
                              
          $new_key=$key;
                              for (
          $i3=0$i3<$max$i3++){
                                  
          // Hier wird der Schlüssel umgedreht (z.B. aus test wird ttse)
                                  
          $new_key.=substr($key$i31).substr($key, -$i31);    
                              }
                              
          $key=$new_key;
                          }
                          
                          continue;
                      }
                      
          // Wenn es decoded werden soll
                      
          if ($mode=="decode"){    
                          
          // Ascii Code des Textes minus den Ascii Code des Schlüssels rechnen
                          
          $new_ascii=ord(substr($text$i1))-$key_ascii;    
                          
          // Damit kein Wert kleiner 0 raus kommt
                          
          if ($new_ascii<=0){$new_ascii+=256;}    
                      }else{
                          
          // Bei Encode  Ascii Code des Textes plus den Ascii Code des Schlüssels rechnen
                          
          $new_ascii=ord(substr($text$i1))+$key_ascii;    
                          
          // Hmm eigentlich unnötig^^ Aber hab ich vorsichtshalber mal mit hingeschrieben
                          
          if ($new_ascii>256){$new_ascii%=256;}    
                      }
                      
          // Der $encoded String wird der neue Buchstabe hinzugefügt
                      
          $encoded.=chr($new_ascii);   
                      
          // Position des Schlüssels um 1 erhöhen
                      
          $n++;    
                  }
                  return 
          $encoded;
                  
              }  
          ?>
          @Chriz: Mir geht es nicht darum, dass ihr mir beweißt, dass diese Methode unsicher ist - es reicht auch schon, wenn ihr sagt, dass diese Methode gar nicht sicher sein kann. Dann glaub ich euch das auch =) Ich verlange nicht im geringsten, dass sich jemand damit länger beschäftigt (Da fällt mir die 100 Euro Wette ein^^) Aber langsam bin ich wirklich kurz davor, etwas fertiges zu nehmen, aber ein Versuch ist es ja noch wert

          Kommentar


          • #6
            Der Algorithmus ist sehr unsicher.
            Unter anderem ist er a) zu einfach und b) verwendet er keinen Schlüssel o.ä.
            "Nobody is as smart as everybody" - Kevin Kelly
            — The best things in life aren't things

            Kommentar


            • #7
              Zitat von phpdummi-new Beitrag anzeigen
              b) verwendet er keinen Schlüssel o.ä.
              Wie genau meinst du das? Ein Schlüssel wird verwendet!?!

              Kommentar


              • #8
                Zitat von Young Jedi Beitrag anzeigen
                Der Schlüssel wurde vorher mit dem Diffie Hellman Schlüsselaustauschprinzip übertragen.
                @phpdummi
                Hier steht das er einen Schlüssel verwendet.

                Kommentar


                • #9
                  Quatsch nicht, ihr schickt euch das Passwort per Email zu - ich kenn doch die Geschichten

                  Also dein Kryptografie-Verfahren scheint wieder so ein "Security by Obscurity" zu sein, wie gesagt ich halte nichts davon - es gibt sichere Algorithmen und aus Eitelkeit oder Programmierlust eine eigene Verschluesselungsverwurstung zu schreiben ist unprofessionell und fahrlaessig. Deshalb bin ich auch raus aus diesem Thread, er fuehrt zu nichts.
                  "Mein Name ist Lohse, ich kaufe hier ein."

                  Kommentar


                  • #10
                    Zitat von Chriz Beitrag anzeigen
                    Quatsch nicht, ihr schickt euch das Passwort per Email zu - ich kenn doch die Geschichten
                    Eigentlich wollten wir das ganze ja in nem pub irc channel austauschen, aber dann haben wir uns doch für einen Austausch über seinen Blog geeinigt^^ Ne, das ist einer der seltenen Dinge die an der Klasse auch funktionieren


                    Zitat von Chriz Beitrag anzeigen
                    Also dein Kryptografie-Verfahren scheint wieder so ein "Security by Obscurity" zu sein, wie gesagt ich halte nichts davon - es gibt sichere Algorithmen und aus Eitelkeit oder Programmierlust eine eigene Verschluesselungsverwurstung zu schreiben ist unprofessionell und fahrlaessig. Deshalb bin ich auch raus aus diesem Thread, er fuehrt zu nichts.
                    Ok, die Meinung akzeptiere ich - ist ja auch was wahres dran

                    Kommentar

                    Lädt...
                    X