Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlerhafte Funktion

Einklappen

Neue Werbung 2019

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

  • Fehlerhafte Funktion

    Hallo zusammen,

    in folgender Funktion bekomme ich auf meinem Webserver immer die Fehlermeldung.

    Warning: Division by zero in /var/www/vhosts/xxx.de/httpdocs/xxx/functions.inc.php on line 150

    Der Fehler ist anscheinend in den beiden Zeilen "$return="
    Lokal auf meinem xampp läuft die Funktion jedoch ohne Fehler.

    Hat jemand eine Idee?


    Code:
    function sbox_round($integer)
        {
        global $sbox0,$sbox1,$sbox2,$sbox3;
    
        //$integer in vier 8 Bit Blöcke unterteilen
        //Split $integer into four 8 Bit blocks
        $b0 = $integer<<24 & 0xFF;
        $b1 = $integer<<16 & 0xFF;
        $b2 = $integer<<8 & 0xFF;
        $b3 = $integer & 0xFF;
        
    
        $return = ($sbox0[$b0] + $sbox1[$b1] % pow(2,32));
        $return = ($return ^ $sbox2[$b2]) + $sbox3[$b3] % pow(2,32);
    
        return $return;
        }

  • #2
    Hallo, willkommen hier im Forum!

    Was PHP damit sagen will ist ja klar (oder? - sorry man muss immer fragen). Sehe hier garkeine direkte Division. Welches genau ist die Zeile, welche Werte haben die Variablen dieser Zeile und welches Error-Reporting-Level hast du eingestellt?

    Variablenwerte kannst du mittels var_dump() ermitteln.

    Kommentar


    • #3
      Hi Zergling.

      Ja, was PHP mir sagen will ist klar. Aber wie du sehe ich hier auch keine Division. Das macht ich ja so stutzig.

      Der Quellcode ist nicht mein eigener. Er ist Teil einer BLowfish Verschlüsselung die ich von http://www.php-einfach.de/sonstiges_...r_blowfish.php habe.

      Der Fehler tritt in den beiden Zeilen

      PHP-Code:
      $return = ($sbox0[$b0] + $sbox1[$b1] % pow(2,32));
      $return = ($return $sbox2[$b2]) + $sbox3[$b3] % pow(2,32); 
      auf.

      Wie erkenne ich welches Error-Reporting-Level ich eingestellt habe?

      Kommentar


      • #4
        Willkommen im Forum.

        Was meinst Du mit "den beiden Zeilen"
        Es gibt nur eine Zeile 150. Welche von den beiden ist es?

        Mal so ne Idee....
        Der Modulo-Operator arbeitet ja nur mit Integer Werten sinnvoll.
        Falls Integer auf Deinem System 32 Bit haben, ist pow(2,32) ja 2 hoch 32 und damit ist der Anteil, der als Integer darstellbar ist, 0 weil der Rest ein Überlauf ist.
        Damit würdest Du Modulo 0 rechnen, was einer Division durch 0 gleich kommt.

        Wie man auf die Idee kommen kann, Modulo (2 hoch 32) zu rechnen, statt einfach eine bitweise Und-Verknüpfunf mit (2 hoch 32) - 1 zu machen, ist mir etwas schleierhaft. Das kann nur ein Mathematiker mit wenig Ahnung von Rechner-Grundlagen verbrochen haben.

        Ersetze den Teil lieber durch
        PHP-Code:
          0xFFFFFFFF 
        **********************************
        Nein, ich bin nicht die Signatur.
        Ich putze hier nur.
        **********************************

        Kommentar


        • #5
          Zitat von Zergling
          welche Werte haben die Variablen dieser Zeile
          [..]
          Variablenwerte kannst du mittels var_dump() ermitteln.
          !

          Das Error-Reporting-Level kannst du mit ini_get('error_reporting') auslesen.

          Kommentar


          • #6
            Zitat von Der_Gerhard
            Willkommen im Forum.

            Was meinst Du mit "den beiden Zeilen"
            Es gibt nur eine Zeile 150. Welche von den beiden ist es?

            Mal so ne Idee....
            Der Modulo-Operator arbeitet ja nur mit Integer Werten sinnvoll.
            Falls Integer auf Deinem System 32 Bit haben, ist pow(2,32) ja 2 hoch 32 und damit ist der Anteil, der als Integer darstellbar ist, 0 weil der Rest ein Überlauf ist.
            Damit würdest Du Modulo 0 rechnen, was einer Division durch 0 gleich kommt.

            Wie man auf die Idee kommen kann, Modulo (2 hoch 32) zu rechnen, statt einfach eine bitweise Und-Verknüpfunf mit (2 hoch 32) - 1 zu machen, ist mir etwas schleierhaft. Das kann nur ein Mathematiker mit wenig Ahnung von Rechner-Grundlagen verbrochen haben.

            Ersetze den Teil lieber durch
            PHP-Code:
              0xFFFFFFFF 
            er meldet:
            Warning: Division by zero in /var/www/vhosts/xxx.de/httpdocs/xxx/functions.inc.php on line 150

            UND

            Warning: Division by zero in /var/www/vhosts/xxx.de/httpdocs/xxx/functions.inc.php on line 149

            Von daher sind es schon die beiden Zeilen. Danke für eure Hinweise. Ich werde es versuchen.

            Kommentar


            • #7
              Ich weiß nicht, nichts gegen Schüler, aber von einem Schüler würde ich mir nicht unbedingt meine Verschlüsselungs-Funktionen programmieren lassen.

              Vielleicht schlampt er ja nicht nur beim Stil ("global") sondern auch bei anderen Dingen (wie es ja scheint).

              Verlässlicher wäre vielleicht doch
              http://pear.php.net/package/Crypt_Blowfish/
              http://pear.php.net/package/Crypt_Bl..._Blowfish.html
              Code:
              1      $bf =& Crypt_Blowfish::factory('cbc');
              2      if (PEAR::isError($bf)) {
              3          echo $bf->getMessage();
              4          exit;
              5      }
              6      $iv = 'abc123+=';
              7      $key = 'My secret key';
              8      $bf->setKey($key, $iv);
              9      $encrypted = $bf->encrypt('this is some example plain text');
              10     $bf->setKey($key, $iv);
              11     $plaintext = $bf->decrypt($encrypted);
              12     if (PEAR::isError($plaintext)) {
              13         echo $plaintext->getMessage();
              14         exit;
              15     }

              Kommentar

              Lädt...
              X