Ankündigung

Einklappen
Keine Ankündigung bisher.

MD5-Code als Dezimalzahl

Einklappen

Neue Werbung 2019

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

  • MD5-Code als Dezimalzahl

    Guten Tag!

    Ich suche eine Möglichkeit, einen MD5-Code in eine Dezimalzahl umzuwandeln. Wie ihr wisst, gibt die Funktion md5() eine Hexadezimalzahl aus. Mit hexdec() alleine lässt sich keine genaue Zahl ausgeben, da der MD5-Code zu lang ist.
    Also muss ich den MD5-Code in einzelne Teile zerlegen.

    Meine Frage nun:

    Was muss ich mit den zerlegten MD5-Teilen machen, damit hinterher die korrekte Zahl herauskommt. Sagen wir ich teile den Code in 8 Teile á 4 Zeichen und wandle diese mit hexdec() in Dezimalzahlen um. Was muss ich nun machen, damit ich das korrekte Ergebnis erhalte?

    Ich wäre sehr dankbar für Lösungsvorschlage


  • #2
    also ich weiß immo nicht wieso du einen md5 code in eine dezimalzahl umwandeln möchtest, willst du den code dadurch entschlüsseln? Da das passwort bzw die verschlüsselung von einem String in per Hash schlüssel in diese Hexa zahlen umgewandelt wird kannst du ohne den richtgigen Hash key eh nicht wieder die ausgangslage zurückrechnen
    aber ich lass mich gerne von anderem überzeugen


    wobei ich noch gesehen habe auf PHP: md5 - Manual hat einer eine funktion geschrieben die das macht :>
    wenn ich mich nich irre....hier ma der code
    PHP-Code:
    <?php
    define
    ('HEX_CHARS',    '0123456789abcdef');
    define('BASE62_CHARS''0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
     
    /*********************************************/
    function ConvertFromArbitraryBase($Str$Chars)
    /*********************************************/
    {
        
    /*
            Converts from an arbitrary-base string to a decimal string
        */
        
        
    if (ereg('^[' $Chars ']+$'$Str))
        {
            
    $Result '0';
            
            for (
    $i=0$i<strlen($Str); $i++)
            {
                if (
    $i != 0$Result bcmul($Resultstrlen($Chars));
                
    $Result bcadd($Resultstrpos($Chars$Str[$i]));
            }
            
            return 
    $Result;
        }
        
        return 
    false;
    }
    ?>
    </span></span>

    Kommentar


    • #3
      Ich bin nicht sicher ob das die richtige Funktion ist. Ich kapier nicht was die bewirken soll... was soll der zweite Parameter.

      Ein MD5-Code ist ja ein Hex-Code. Ich will den einfach nur als Dezimalzahl. Der Code ist aber zu lang um ihn einfach mit hexdec() auszugeben. Daher muss ich ihn zerstückeln und die einzelnen Teile später wieder zusammenfügen. Heraus kommt eine Dezimalzahl (als String). Ich will nun wissen, wie ich die Teile wieder zusammenfüge.

      Ich möchte den MD5-Code selbstverständlich nicht entschlüsseln. Ich brauche die Zahl, weil ich etwas in Dezimalzahlen verschlüsseln will.

      Kommentar


      • #4
        Mit ein bißchen überlegen kommst Du auch drauf:

        Im Dezimalsystem wäre diese Umwandlung so:

        Ausgangsstring: 8544564
        Sagen wir, Du teilst in 4 Zeichen lange Stings: 8754 4564
        Dann wandelst Du um: 8754 4564
        Die Kombination ergibt sich als Potenz aus der Länge des Stringoffset und der zugrundeliegenden Zahlenbasis: 4 und 10, die Multiplikation erfolgt von links nach rechts
        Ergebnis: 4564 + 4^10 * 8754

        Hex Bsp1:

        AB
        A B
        10 11
        Offset 1 und Zahlenbasis 16
        11 + 16^1 * 10
        = 171

        Hex Bsp2:

        ABCD
        AB CD
        171 205
        Offset 2 und Zahlenbasis 16
        205 + 16^2 * 171
        = 43981
        --

        „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


        • #5
          Hallo,

          die Umwandlung ist eigentlich ganz einfach.

          Die Stellen des Hashes haben immer eine Potenz höher mit der Basis 16, beginnend von rechts. Ganz rechts ist 16 hoch 0, kinks davon ist 16 hoch 1 ....

          Du must einfach den Hash durchgehen und die Zahl wo an der Stelle steht mit der Wertigkeit multiplizieren und hinterher alles zusammenzählen.

          Wobei ein A einer 10 entspricht und ein B 11 ....

          Dann kannst dir einfach eine eigene Funktion schreiben.

          Gruß
          Markus

          Kommentar


          • #6
            Hi! Ich hoffe ich habe jetzt alles richtig gemacht. Als Beispiel folgender MD5-Code:

            c4ca4238a0b923820dcc509a6f75849b

            ergibt als Dezimalzahl:

            261578874264819908609102035485573088411

            Ich glaube es stimmt, falls ihr kein Bock habt das nachzurechnen, egal, ich danke euch vielmals, ihr habt mir sehr geholfen

            Kommentar


            • #7
              Ja die Zahl ist richtig:
              PHP-Code:
              <?php
              $number  
              "c4ca4238a0b923820dcc509a6f75849b";
              $decimal "0";
              bcscale(0);
              for (
              $x 0$i strlen($number) - 1$i >= 0; --$i, ++$x) {
                  
              $hex bcpow("16"$x);
                  
              $dec hexdec($number{$i});
                  
              $tot bcmul($hex$dec);
                  
              $decimal bcadd($decimal$tot);
              }
              echo 
              $decimal;
              ?>

              Suchst du vielleicht eher eine numerische Hashfunktion?
              PHP: crc32 - Manual
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar

              Lädt...
              X