Anfänger Problem: Verschlüsseln mit Rijndael 256

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

  • Anfänger Problem: Verschlüsseln mit Rijndael 256

    Hallo erstmal,
    Ich habe erst vor ca 4 Wochen begonnen mit PHP ein bisschen zu Programmieren und bin deshalb noch sehr grün hinter den Ohren.
    Als Lektüre verwende ich hierfür
    PHP5 / MYSQL 5 von Matthias und Caroline Kannengieser
    .
    Da ich momentan noch keinerlei Ahnung von Klassen habe, da das erst später im Buch dran kommt und ich das Buch nicht Kreuz und Quer lesen will, habe ich eine Frage bezüglich einer Klasse mit Rijndael Verschlüsselung 256.
    (Ich schreib neben den Lesen natürlich immer wieder ein paar Scripts zwecks Übung)

    Ich habe mir bereits ein paar Formularseiten gemacht in der ich Daten per POST auf andere Seiten sowie in eine SQL DB überträge.

    Da ich z.B. Passwörter aber verschlüsselt Übertragen bzw in der DB ablegen will bin ich per Google auf eine Funktionen/Klasse gestoßen das meine Zwecke erfüllen sollte.
    Allerdings weiß ich jetzt nicht ganz wie ich einen Variablen Wert jetzt damit Verschlüssle und Entschlüssle. (PS: Habe es in einer extra Datei und nur per Include eingefügt.)

    Hier die Funktionen/Klasse:

    PHP-Code:
    <?php
    ///////////////////////////////////////////////////
    //    A Encryption/Decryption CLASS with Rijndael 256    
    //    By Ismet Ozalp
    //  16.03.2005
    //  Please Do not remove this header
    ///////////////////////////////////////////////////
    class pWord {
        var 
    $mykey "MyKey";
        function 
    getEncryptedPass($len){
            
    $pass $this->makeRandomPassword($len);
            return 
    $this->linencrypt($pass);
        }
        function 
    linencrypt($pass) {
            
    $iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256MCRYPT_MODE_ECB); //get vector size on ECB mode 
            
    $iv mcrypt_create_iv($iv_sizeMCRYPT_RAND); //Creating the vector
            
    $cryptedpass mcrypt_encrypt (MCRYPT_RIJNDAEL_256$this->mykey$passMCRYPT_MODE_ECB$iv); //Encrypting using MCRYPT_RIJNDAEL_256 algorithm 
        
    return $cryptedpass;
        }

        function 
    lindecrypt($enpass) {
            
    $iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256MCRYPT_MODE_ECB); 
            
    $iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
            
    $decryptedpass mcrypt_decrypt (MCRYPT_RIJNDAEL_256$this->mykey$enpassMCRYPT_MODE_ECB$iv); //Decrypting...
        
    return rtrim($decryptedpass);
        }
        function 
    makeRandomPassword($len) { 
              
    $salt "ABCDEFGHJKLMNPRSTUVWXYZ0123456789abchefghjkmnpqrstuvwxyz"
              
    srand((double)microtime()*1000000); 
            for(
    $i 0;$i $len;$i++) { 
                
    $num rand() % 56
                
    $tmp substr($salt$num1); 
                
    $pass $pass $tmp
            } 
        return 
    $pass
        }

    ?>
    Ich bräuchte jetzt einfach nur ne kurze Erklärung wie ich es Verwende, wenn z.B.
    $Geheim = "Darf niemand wissen"
    ist.

    Vielen dank schon mal für eure Hilfe.
    Zuletzt geändert von Maanee9; 22.06.2009, 15:05.
    Der die das, wer wie was, wieso weshalb warum
    ..... wer nicht fragt bleibt dumm.

  • #2
    Mal abgesehen vom konkreten Problem:

    Passwörter sollte man nicht verschlüsseln - denn dann kann sie auch ein Angreifer, der Zugang zu den Daten enthält, wieder entschlüsseln.

    Stattdessen sollte man sie unter Zuhilfenahme eines zufälligen Salt Hashen. Hash-Funktionen liefern einen hinreichend eindeutigen Wert, und haben aber keine "Umkehrfunktion". MD5 wurde lange Zeit dafür benutzt, gilt mit heutiger Rechenpower allerdings als angreifbar - deshalb benutzt man aktuell SHA1 oder noch "stärkere" Hash-Algorithmen.

    Allerdings weiß ich jetzt nicht ganz wie ich einen Variablen Wert jetzt damit Verschlüssle und Entschlüssle.
    Gibt's denn keine Dokumentation zu der Klasse?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ok. Das Passwörter allgemein nicht so gespeichert werden sollen hab ich schon gehört. (Will ich ja auch eigentlich noch gar nicht)

      Mir gehts jetzt nur darum das ich ein kleines Onlinegame machen will... also nix überagendes oder so.
      Es geht nur darum das ich z.B. wenn ich nen Slotautomaten progrmmiere, der z.B. 5 Geldheiten als Guthaben hat, der Spieler damit spielt und verliert das neue Guthaben wieder per verschlüsselten _POST["Guthaben"] übertragen wird.

      Nö.. hab leider keinerlei Dokumentation dazu. Da gabs nur die Datei ohne irgendwelche Infos oder sonst was dazu.

      Darum wollte ich auch fragen ob jemand weiß, wie ich damit die Werte einer Variable verschlüssle und wieder entschlüssle.

      Vll kann mich auch jemand auf ein ähnliches Script hinweisen das diesen Zweck erfüllen würde, falls es mit dem obigen gar nicht funktioniert.
      Der die das, wer wie was, wieso weshalb warum
      ..... wer nicht fragt bleibt dumm.

      Kommentar


      • #4
        Zitat von Maanee9 Beitrag anzeigen
        Ok. Das Passwörter allgemein nicht so gespeichert werden sollen hab ich schon gehört. (Will ich ja auch eigentlich noch gar nicht)

        Mir gehts jetzt nur darum das ich ein kleines Onlinegame machen will... also nix überagendes oder so.
        Es geht nur darum das ich z.B. wenn ich nen Slotautomaten progrmmiere, der z.B. 5 Geldheiten als Guthaben hat, der Spieler damit spielt und verliert das neue Guthaben wieder per verschlüsselten _POST["Guthaben"] übertragen wird.
        Und wie willst du es am Client verschlüsseln? Mit Javascript? Lässt sich sehr leicht umgehen. Mit Flash? Lässt sich dekompilieren.

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          Und wie willst du es am Client verschlüsseln? Mit Javascript? Lässt sich sehr leicht umgehen. Mit Flash? Lässt sich dekompilieren.

          Blubb... versteh ich jetzt nicht ganz.
          Wieso Client ?

          Der Client soll ja nur die Verschlüsselten Werte übertragen... der Rest wird doch nur Serverseitig behandelt.. Oder lieg ich da jetzt falsch.
          Zuletzt geändert von Maanee9; 22.06.2009, 13:32.
          Der die das, wer wie was, wieso weshalb warum
          ..... wer nicht fragt bleibt dumm.

          Kommentar


          • #6
            Von wo wohin willst du die verschlüsselten Werte übertragen? Wenn du die Werte nur am Server verwendest, brauchst du sie nicht verschlüsseln.

            Kommentar


            • #7
              Ich zeigs einfach mal anhand meines Glückomats...
              http://war-of-races.de/TEST/Zufallszahlen.php

              Hier giebt man seine Werte ein und hatt ein gewisses Guthaben.
              Man stellt sich ein um wie viel man Spielen kann.. wie viel verschiedene zahlen es geben soll und wie viele Richtig sein müssen.

              Dann werden die Felder bei mir mit POST auf sich selber übertragen und in die Funktionen eingesetzt und das Ergebnis ausgegeben.
              Das kann man natürlich beliebig wiederholen.

              Und genau die Werte sollen jetzt damit verschlüsselt übertragen werden.
              Der die das, wer wie was, wieso weshalb warum
              ..... wer nicht fragt bleibt dumm.

              Kommentar


              • #8
                Aber damit du die Werte beim Client anzeigen kannst, musst du sie auch beim Client wieder enstschlüsseln. Und damit du neue Werte posten kannst, musst die sie am Client wieder auch verschlüsseln. Oder wie hast du dir das vorgestellt? Ansonsten sieht der Benutzer ja nur verschlüsselten Zeichensalat.

                Kommentar


                • #9
                  Ja.. natürlich soll der Client die Daten entschlüsselt sehen.

                  Hab mir das mit nem Versteckten und Sichtbaren Textfeld vorgestellt


                  Also quasi...

                  $_POST["guthaben"] = entschlüsseln($_POST["guthaben"] )

                  <TEXTFELD name"guthaben_visible" value "echo $_POST["guthaben"]"> Die Anzeige im Fenster

                  anschließend wieder verschlüsseln

                  $_POST["guthaben"] = verschlüsseln($_POST["guthaben"] )

                  <TEXTFELD name"guthaben" value "echo $_POST["guthaben"]"> Das is dann ein Hidden Textfeld das die Werte anschließend übergeben soll...

                  Mit der Methode wollt ich das machen. Also quasi ein verschlüsseltes und sichtbare Textfeld.

                  Mir gings eigentlich jetzt nur darum wie ich die jetzt verschlüssele mit der Klasse, da ich nicht weiß wie ich sie anwende.
                  Zuletzt geändert von Maanee9; 22.06.2009, 13:59.
                  Der die das, wer wie was, wieso weshalb warum
                  ..... wer nicht fragt bleibt dumm.

                  Kommentar


                  • #10
                    Und wieso speicherst du die Werte nicht einfach in der Session, anstatt sie ständig verschlüsselt dem Browser zu schicken, damit er sie wieder an der Server zurück schickt? Ist doch nur ein unnötiger Umweg.

                    Kommentar


                    • #11
                      Mit Sessions hab ich mich momentan leider noch nicht beschäftigt.. die kommen bei mir erst demnächst dran und darum weiß ich natürlich jetzt leider nicht wie es mit Session funktioniert.

                      Mir gehts halt im Prinzip wirklich nur darum Daten nur in Verschlüsselter Form weiter zugeben. Ob mit POST, GET, COOKIE oder Session.

                      Ich möchte halt einfach nur Funktionen die es möglichst gut verschlüsselen und auch wieder entschlüsselen.
                      Darum hab ich mir auch die obige Klasse runtergeladen, wobei ich leider nicht weiß wie ich damit die Variblen verschlüssle.

                      Zusätzlich noch vielen dank für die schnellen Antworten... ich fühl mich nämlich grad wie ne Nervensäge. Kenn mich halt leider noch nicht so aus.
                      Der die das, wer wie was, wieso weshalb warum
                      ..... wer nicht fragt bleibt dumm.

                      Kommentar


                      • #12
                        Wie auch immer, Verschlüsseln ist hier keine Lösung. Wenn dem Benutzer das Ergebnis des Spiels nicht passt, drückt er auf den Back-Button im Browser und hat wieder die alten Werte im Formular stehen. Dies kann er dann so lange wiederholen, bis er was gewinnt.

                        Kommentar


                        • #13
                          Man kann auch einfach das read-only input abändern und hat 10^xxx.
                          Ausserdem, die Variabeln $_POST, $_COOKIE und $_GET solltest du ebenfalls als read-only betrachten. Wenn du error_reporting auf E_ALL hast dann kriegst du auch einen Hinweis darauf, wenn ich mich richtig erinnere.

                          Kommentar


                          • #14
                            hmm.. ok.
                            Stimmt. Das mit dem Zurück hab ich so noch gar nicht bedacht sowie eingies was zuvor gesagt wurde.

                            Aber im Prinzip sollts eigentlich nurn Beispiel sein was ich eigentlich vorhab da das Glückomat-ding eh mehr ne kleine Übung war in der ich nur was ausprobieren wollte.
                            Von daher besteht mein eigentlich Problem immer noch.

                            Ich weiß einfach nicht wie ich mit dieser Funktion was verschlüssle...
                            Also wie ich die Funktion aufrufe.

                            Ich habe jetzt Beispielsweise.

                            $guthaben = 5;
                            dann will ich als nächstes
                            $crypt_guthaben = verschlüsseln($guthaben);
                            Nur leider weiß ich jetzt nicht wie das mit der Klasse jetzt funktioniert.
                            (Zur Wiederholung| Klasse is per Include einfach eingebunden).

                            Natürlich soll das auch in die Andere richtung funktionieren.

                            Ich brauch eigentlich bloß kurz ein HOW-TO, wie ich mit dem Verschlüsselungsding jetzt umgehen soll.
                            Der die das, wer wie was, wieso weshalb warum
                            ..... wer nicht fragt bleibt dumm.

                            Kommentar


                            • #15
                              Zitat von Maanee9 Beitrag anzeigen
                              Nur leider weiß ich jetzt nicht wie das mit der Klasse jetzt funktioniert.
                              Dann lern es:

                              PHP: Classes and Objects (PHP 5) - Manual

                              Kommentar

                              Lädt...
                              X