Ankündigung

Einklappen
Keine Ankündigung bisher.

md5 mit 8 zeichen

Einklappen

Neue Werbung 2019

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

  • md5 mit 8 zeichen

    hy ich habe die aufgabe einen 8 stelligen hash mit datum und zufallszahl zu generieren.

    Ich habe nun sowas:
    PHP-Code:
    $value time() * rand();
    $md5 md5($value); 
    Damit kriege ich halt einen hash mit 35 zeichen.

    Wie würdet ihr das lösen? Den string einfach abschneiden?


  • #2
    jep substr (hatte nicht MD5 nur 32 stellen?)
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

    Kommentar


    • #3
      Wofür genau musst du das machen? Wenn der md5 Hash abgeschnitten wird (hat 32 Zeichen) dann gibt es viel mehr Ursprungswörter die den selben Hash ergeben.

      Kommentar


      • #4
        Genau das habe ich auch gedacht.

        Ich brauche das um einen eindeutigen namen zu erhalten, den man nicht zurückverwandeln kann.

        Kommentar


        • #5
          Und wieso muss der 8-stellig sein?
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Nun das habe ich mit meinem Vorgesetzten so besprochen.
            Da man den Code auch mal per Telefon weitergibt sollte der nicht zu lang sein.
            Aber spielt das eine Rolle?

            Kommentar


            • #7
              Zitat von Shylux Beitrag anzeigen
              Aber spielt das eine Rolle?
              ja es spielt eine rolle, der MD5 hash ist nur dann nicht zurück umzurechnen, sobald es alle seine zeichen hat, wenn es abgeschnitten wird, kann es durchaus doppelte werte erzeugen, wird zwar dauern aber irgendwann bestimmt.
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

              Kommentar


              • #8
                Zitat von Shylux Beitrag anzeigen
                Ich brauche das um einen eindeutigen namen zu erhalten, den man nicht zurückverwandeln kann.
                - Durch rand() erzeugst Du Zufall, daher kommt "zurückverwandeln" hier sowieso nicht in Frage.
                - mit md5 erreichst Du eine eindeutige Bildmenge, die nicht zurück ins Urbild berechnet werden kann.
                - je kleiner das Bild (hier Beschneidung auf 8 hexadezimale Bytes, 16^8 mögliche Bildmengen, also knapp 4,3 Mrd.), umso höher die Kollisionswahrscheinlichkeit.

                Also wenn Du reinen Zufall haben willst nimm uniqid+rand und beschneide nach Bedarf.

                Kommentar


                • #9
                  Du kannst ja auch 8 zufällige Positionen aus dem Bereich 0 - 31 wählen und diese dann als neuen String zusammenfügen

                  So z.B.
                  PHP-Code:
                  <?php
                  $md 
                  md5rand() * time() );

                  $string '';
                  for ( 
                  $i=0$i 8$i++ ) {
                      
                  $string .= $md[rand(031)];
                  }

                  var_dump$string );
                  ^^
                  Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
                  Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

                  Kommentar


                  • #10
                    Oder hash('sha512', $value) verwenden. Damit haste die Kollisionswahrscheinlichkeit auf fast 0 gesetzt.

                    Kommentar


                    • #11
                      Zitat von stayInside Beitrag anzeigen
                      Oder hash('sha512', $value) verwenden. Damit haste die Kollisionswahrscheinlichkeit auf fast 0 gesetzt.
                      Bei 8 Zeichen Länge?
                      Read, then post...
                      VokeIT GmbH & Co. KG - VokeIT-oss @ github

                      Kommentar


                      • #12
                        Da man den Code auch mal per Telefon weitergibt
                        Klingt irgendwie nach ner Registriernummer oder einem Passwort. Dafür ist ein 8-stelliger Hex-Hash aber viel zu schwach, weil die Zeichenmenge stark eingeschränkt ist.

                        time() * rand() kann auch schnell mal zum Überlauf führen, damit kannst Du unnötigerweise sogar selbst Kollisionen erzeugen.
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Hi,

                          Wieso generierst du dir nicht einfach einen Code und checkst (falls vorhanden) in einer DB ob dieser schon vorhanden ist?

                          Bsp:
                          PHP-Code:
                          $abc = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1","2","3","4","5","6","7","8","9","0");
                          for(
                          $i=0;$i<8;$i++){ $id .= $abc[shuffle($abc)];

                          $query  mysql_query("SELECT `spalte` FROM `tabelle` WHERE `spalte` LIKE '".$id."'");
                          while(
                          mysql_num_rows($query) > 0)  { 
                            
                          //...

                          Kommentar


                          • #14
                            PHP-Code:
                            $id substrbase64_encodesha1"zufall"true ) ), 0); 
                            Damit hast du eine wesentlich höhere Wahrscheinlichkeit, dass eine ID nicht doppelt vorkommt und sie bleibt darstellbar UND lesbar! Wenn man mag, kann man auch noch die beiden Sonderzeichen im Base64 herausfiltern...

                            Kommentar


                            • #15
                              Ich hab mir jetzt den Thread nicht durchgelesen, aber eine Hashsumme einfach zu verkürzen kann die "Mächtigkeit" eines Hashalgorithmus gegebenenfalls sehr einschränken. Bei md5() ist zwar die Verteilung sehr stark, sprich ein geändertes Zeichen ändert nahezu alle anderen Bits, trotzdem ist das Knacken (Duplikaterzeugung) damit sicherlich noch schneller möglich.

                              Wenn dann solltest du den "Überhang" den du möglicherweise abschneidest (md5 32 auf md5 8 byte) mit in den stehengebliebenen Hash "verwursten". Aber auch das ist nicht unbedingt anzuraten.
                              "Mein Name ist Lohse, ich kaufe hier ein."

                              Kommentar

                              Lädt...
                              X