Tim Falkenfloh: Zufallszahl darf nur 6 Zeichen haben

Hallo,

ich muß in meinem PHP Script eine eindeutige Kennung erzeugen die per Zufall generiert.

nur möchte ich das die Kennung auf 6 Zeichen begrenzt ist wie mache ich das?

srand((double)microtime()*1000000);
$kennung = md5(uniqid(rand()));

Kann ich irgendwie die Anzahl der Zeichen festlegen?
Ich könnte auch die Zeichenkette nach 6 Zeichen abschneiden aber dann habe ich doch mit PHP zuviel generiert was wieder unnötige Resourcen verbraucht was ja nicht sein muß.

Hat jemand eine Idee was besser und Resourcen schonender ist?

Gruß Tim Falkenfloh

  1. Moin Tim,

    srand((double)microtime()*1000000);
    $kennung = md5(uniqid(rand()));

    Kann ich irgendwie die Anzahl der Zeichen festlegen?

    Hier werden sie geholfen:

    http://us2.php.net/manual/de/function.rand.php

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
    1. Hallo,

      es geht mir um folgendes ich möchte in einer Bestätigungs Email ein Code in den Link einbauen wenn der Link geklickt wird, wird das Script auf dem Server aufgerufen welches folgendes tut:

      Es fragt ab ob der Code gleich mit dem Datenbankwert ist wenn ja soll in einem anderen Feld das neue Passwort generiert werden. Und anschliessend wird der code aus der Datenbank gelöscht weil ja ein neues Passwort generiert wurde.

      Die Frage ist nun macht es Sinn den Code md5 zu generieren oder reicht es aus eine Zufallszahl zu generieren.

      Es gibt doch auch noch andere Verschlüsslungsverfahren evtl sind dort die Schlüssel kürzer?

      Gruß Tim Falkenfloh

      1. Moin nochmal,

        Es gibt doch auch noch andere Verschlüsslungsverfahren evtl sind dort die Schlüssel kürzer?

        Wie ist es hiermit?

        $len=6;

        $pass = '';
           $lchar = 0;
           $char = 0;
           for($i = 0; $i < $len; $i++)
           {
               while($char == $lchar)
               {
                   $char = rand(48, 109);
                   if($char > 57) $char += 7;
                   if($char > 90) $char += 6;
               }
               $pass .= chr($char);
               $lchar = $char;
           }

        echo $pass;

        Gruß
        Mike

        --
        Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
        1. Hi,

          ich lese hier was von srand was ich aber nicht so recht verstehe:
          Benutzen Sie unbedingt srand(), um vor dem ersten Aufruf von rand() einen neuen Startwert festzulegen, ansonsten erhalten Sie bei jedem Programmlauf dieselbe Sequenz von Werten.

          Wenn ich srand benutze wird ein neuer Startwert gesetzt aber auf was bezieht sich das denn nun.

          Wenn User A das Script mit rand(); aufruft und User B das selbe Script aufruft bekommt der nicht jeder User als erstes den Zufallsmix z.B. Yn60KI geliefert!?

          Und wieso hast Du folgendes geschrieben?

          $char = rand(48, 109);
                     if($char > 57) $char += 7;
                     if($char > 90) $char += 6;

          Wie kommst Du auf die Werte?

          Gruß Tim Falkenfloh

          1. Moin,

            Und wieso hast Du folgendes geschrieben?

            diesen code habe ich mir hurtig von der Seite kopiert,
            über den Link welchen ich Dir bereits weiter oben gepostet hatte.

            Gruß
            Mike

            --
            Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
            1. So nun habe ich das Script etwas verändert zum Schluß wird das Passwort noch md5 für die URL Übergabe verschlüsselt und dann soll im nächsten Schritt die md5 Verschlüsslung wieder entschlüsselt werden geht das nicht?

              Oder mit welchen Verschlüsslungsverfahren würde das gehen?

              Gruß Tim Falkenfloh

              $len=6;

              $pass = '';
                 $lchar = 0;
                 $char = 0;
                 srand((double)microtime()*1000000);
                 for($i = 0; $i < $len; $i++)
                 {
                     while($char == $lchar)
                     {
                         $char = rand(48, 109);
                         if($char > 57) $char += 7;
                         if($char > 90) $char += 6;
                     }
                     $pass .= chr($char);
                     $lchar = $char;
                 }

              echo $pass;
              echo "<br>";
              echo md5($pass);
              echo "<br>";

              1. hi,

                und dann soll im nächsten Schritt die md5 Verschlüsslung wieder entschlüsselt werden geht das nicht?

                wenn du bitte mal kurz darüber nachdenkst, warum MD5 als "einwegverschlüsselung" bezeichnet wird ...

                vielen dank für ihre mithilfe.

                gruss,
                wahsaga

                1. Das mag ja richtig sein mit dem einwegschlüssel, ich erstelle den Schlüssel ja auch nur eoinmal aber es muß doch irgendwie wieder möglich sein zu entcrypten das würde ich dann auch mit den bereits verschlüsselten Schlüssel ebenfalls tun. Es muß wie gesagt ja auch nicht der Usprungswert raus kommen sondern nur 2 gleiche Werte

                  1. hi,

                    Das mag ja richtig sein mit dem einwegschlüssel, ich erstelle den Schlüssel ja auch nur eoinmal aber es muß doch irgendwie wieder möglich sein zu entcrypten das würde ich dann auch mit den bereits verschlüsselten Schlüssel ebenfalls tun.

                    nein. wozu auch?

                    Es muß wie gesagt ja auch nicht der Usprungswert raus kommen sondern nur 2 gleiche Werte

                    dann möchtest du dich mit sog. brute force algorithmen beschäftigen, die so lange rumprobieren, bis sie eine zeichenkette finden, die verschlüsselt den selben wert ergibt.

                    gruss,
                    wahsaga

                    1. ja wo finde ich dieses script?

                      ich hoffe der algorithmus ist auch resourcen schonend!?

                      1. Huhu Tim

                        ja wo finde ich dieses script?
                        ich hoffe der algorithmus ist auch resourcen schonend!?

                        Wenn es Resourcen schonend möglich wäre md5 zu knacken wäre md5
                        nicht mehr "im Rennen".

                        Ein Skript kannst Du Dir selbst schreiben, es muss ja stumpf nur alle möglichen Kombinationen ausprobieren.

                        Bei 32 Zeichen à 16 Möglichkeiten ergibt das ja nur 16^32 Kombinationen
                        viele Spass beim rechnen ;-)

                        Viele Grüße

                        lulu

                        --
                        bythewaythewebsuxgoofflineandenjoytheday
                        1. Bei 32 Zeichen à 16 Möglichkeiten ergibt das ja nur 16^32 Kombinationen

                          ja schon klar aber rechnen wird mein server!

                          ich muss ja auch nicht alle zahlen durchfgehen ich brauch ja nur die multiplex quersumme von meiner prüfsumme berechnen und dazu habe ich schon eine halbe lösung bei astalavista.com gefunden

                          ich dachte ja nur jemand kennt die ganze lösung? meistens werden solche lösungen in der uni 10 mal durchgekaut!

                          1. Huhu Tim

                            Bei 32 Zeichen à 16 Möglichkeiten ergibt das ja nur 16^32 Kombinationen

                            ja schon klar aber rechnen wird mein server!

                            Mmmh, Du möchtest also um Resourcen zu schonen statt einem 32-Zeichen String nur 6 Zeichen nehmen.
                            Und nimmst dafür aber umfangreiche Rechenoperationen in Kauf?

                            Was willst Du eigentlich machen?
                            So wie ich das verstanden habe möchtest Du eine Mail versenden
                            in der ein Link zur Bestätigung einer Aktion auf dem Server, hier Erzeugung eines neuen Passwortes, geklickt werden muss.

                            Ist das so ungefähr richtig?

                            Wie oft wird dieses Verfahren vermutlich durchgeführt, 1-2 Mal in der Woche/ im Monat ?

                            Hier ein paar Byte einzusparen bringt also überhaupt nichts.
                            Nimm doch einfach MD5, und verwende die Zeit die Du eingespart hast für etwas sinnvolles.

                            Viele Grüße

                            lulu

                            --
                            bythewaythewebsuxgoofflineandenjoytheday
                            1. Moin Lulu,

                              Nimm doch einfach MD5, und verwende die Zeit die Du eingespart hast für etwas sinnvolles.

                              dem ist nichts hinzu zu fügen. Ich denke schon langsam an Trollalarm :-)

                              Gruß
                              Mike

                              --
                              Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
  2. Moin!

    Kann ich irgendwie die Anzahl der Zeichen festlegen?

    Nein. Nicht, wenn Du md5() verwendest. Da wirst Du in jedem Fall eine Hexadezimalzahl mit 32 Zeichen Länge bekommen.

  3. Guten Frühling,

    Ich nix verstehen wo du haben Problem...

    $meinekomischewasweissichwascodedernichtlängerals6zeichenseindarf = rand(100000,999999);

    Dann hat das krasse Teil doch auch 6 Zeichen oderwas?

    Undvor allem: Scheiss doch auf Resourcenverschwendung, du weisst doch nur nicht wie machen du können, gelle ?

    Was hier täglich auf sinnlose Müllseite an Ressourcen verpulvert werden... Da kommts auf 10 byte auch nich an...

    Gute Nacht, Döner 4 eva !