0

嘿伙计们

就是这样,我只喜欢在我身边这样做,不仅是 sha1。但是登录和许多其他事情更安全一些。

现在试试我举个例子。

function generateSalt($length) {
      $alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
      $alphabet_length = strlen($alphabet);
      $salt = '';
      for ($i = 0; $i < $length; $i++) {
          $salt .= $alphabet[rand(0, $alphabet_length - 1)];
      }
      return $salt;
  }

  /*
  * Opret bruger på siden og kan har mulighed for alle ting!..
  */

 function bruger_opret_siden(){
         if ($stmt = $this->mysqli->prepare('SELECT NULL FROM `bruger` WHERE `brugernavn` = ?'))
         {
             $stmt->bind_param('s', $brugernavn);
             $brugernavn = $_POST["brugernavn"];
             $stmt->execute();
             $stmt->store_result();
             $count = $stmt->num_rows;
             $stmt->close();
             if($count > 0)
             {
                 $user_found = 1;
             }
         }
         if(!isset($user_found))
         {
             if($_POST["pass"] != $_POST["gentag"])
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive ens password på siden..</li>";
             }
             if(empty($_POST["pass"]) && empty($_POST["gentag"]))
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive et password på siden..</li>";
             }
             if(empty($_POST["navn"]))
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive et Fornavn</li>";
             }
             if(empty($_POST["efternavn"]))
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive et Efternavn</li>";
             }
             if(empty($_POST["land_by"]))
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive en by</li>";
             }
             if(empty($_POST["hojde"]))
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive en Højde</li>";
             }
             if(empty($_POST["email"]))
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive en Email</li>";
             }
             if(empty($_POST["brugernavn"]))
             {
                 $errors = 1;
                 echo "<li id=\"check_not\">Angive en Højde</li>";
             }

             if(!isset($errors))
             {
                 $pb = null;

                 include 'function/class.upload.php';
                 $handle = new Upload($_FILES["file"]);

                 if($handle->uploaded)
                 {
                     //lidt mere store billeder
                     $handle->image_resize = true;
                     $handle->image_ratio_y = true;
                     $handle->image_x = 220;
                     $handle->Process("profil-img/store");

                     //til profil billede lign..
                     $handle->image_resize = true;
                     $handle->image_ratio_crop = true;
                     $handle->image_y = 115;
                     $handle->image_x = 100;
                     $handle->Process("profil-img");

                     //til profil billede lign..
                     $handle->image_resize = true;
                     $handle->image_ratio_crop = true;
                     $handle->image_y = 75;
                     $handle->image_x = 75;
                     $handle->Process("profil-img/lille");
                     $pb = $handle->file_dst_name;            

                 }

              $password = $_POST["pass"];
              $algorithm = '$6$'; //<--- Dette betyder SHA 512
              $salt = $this->generateSalt(16); //<--- SHA 512 bruger et 16 tegn langt salt

              $hash = crypt($password, $algorithm . $salt);

             if ($stmt = $this->mysqli->prepare('INSERT INTO `bruger` 
             (`rank`, `email`, `brugernavn`, `password`, `profilbillede`, `profilbillede_godkendt`, `navn`, `efternavn`, `alder_d`, `alder_m`, `alder_aar`, `status`, `kon`, `seksualitet`, `land_by`, `hojde`) 
             VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'))
             {

                 $stmt->bind_param('issssisssssiiisi', $rank, $email, $brugernavn, $password, $profilbillede, $pb_godkendt, $navn, $efternavn, $alder_d, $alder_m, $alder_aar, $kon, $seksualitet, $partnerstatus, $land_by, $hojde);
                 $rank = '1';
                 $pb_godkendt = '1';
                 $email = $_POST["email"];
                 $brugernavn = $_POST["brugernavn"];//C
                 $password = $hash;//C
                 $profilbillede = $pb;//C
                 $navn = $_POST["navn"];
                 $efternavn = $_POST["efternavn"];
                 $alder_d = $_POST["alder_d"];
                 $alder_m = $_POST["alder_m"];
                 $alder_aar = $_POST["alder_aar"];
                 $kon = $_POST["kon"];
                 $seksualitet = $_POST["seksualitet"];
                 $partnerstatus = $_POST["partnerstatus"];
                 $land_by = $_POST["land_by"];
                 $hojde = $_POST["hojde"];

                 $stmt->execute();
                 $stmt->close();

                 echo "godkendt";

                 }
                 else
                 {
                     /* Der er opstået en fejl */
                     echo 'Der opstod en fejl i erklæringen til ligge i databasen: ' . $mysqli->error;
                 }
             }
         }
         else
         {
             echo "<li id=\"check_not\">Dette brugernavn er optaget!!</li>";
         }
 }

这是它在注册页面上的外观:

 if(isset($_POST["godkendt_bruger"]))
             {
                 $pass = $mebe->generateSalt();
                 $users = $mebe->bruger_opret_siden();
             }
'<?php
     /*
      * Giver admin adgang til se indhold på siden.
      */
     if(isset($_SESSION["rank"]) && $_SESSION["rank"] > 0) {
         $bruger = $mebe->brugerindhold_side();
     }


     /*
      * Hvis ingen af dem så få de bare adgang sådan her..
      */
     else{
     ?>
 <form name="login" method="post" action="#">
     <h1>Log ind</h1>
     <p>Brugernavn</p><input type="text" name="brugernavn"/>
     <p>Password</p><input type="password" name="pass"/>
     <br />
     <input type="submit" name="Log_ind" value="Log ind" id="login">
     <?php
     if(isset($_POST["Log_ind"]))
     {
     $pass = $mebe->generateSalt(12);
     $login = $mebe->godkendt_bruger_login();
     }
     ?>
     <ul>
         <li><a href="">Forgot password and username</a></li>
         <li><a href="/opret-bruger/">Users</a></li>
     </ul>
 </form>
 <?php
     }
 ?>

当我需要登录页面时,这说明了它:

注意:未定义的变量:第 216 行 /home/jesperbo/public_html/mebe/function/function.php 中的哈希

function godkendt_bruger_login(){
          $password = $_POST["pass"];
          $algorithm = '$6$'; //<--- Dette betyder SHA 512
          $salt = $this->generateSalt(16); //<--- SHA 512 bruger et 16 tegn langt salt
         if($stmt = $this->mysqli->prepare('SELECT `id`, `brugernavn`, `rank`, `profilbillede`, `profilbillede_godkendt` FROM `bruger` WHERE `brugernavn` = ? AND `password` = ?'))
         {
         $stmt->bind_param('ss', $brugernavn, $password);
         $brugernavn = $_POST["brugernavn"];
         $password = $hash;
         $stmt->execute();
         $stmt->store_result();
         $stmt->bind_result($id, $brugernavn, $rank, $profilbillede, $profilbillede_godkendt);
         $stmt->fetch();
         $count = $stmt->num_rows;
         $stmt->close();

         if($count > 0)
         {
             $_SESSION["logged_in"] = true;
             $_SESSION["id"] = $id;
             $_SESSION["profilbillede"] = $profilbillede;
             $_SESSION["brugernavn"] = $brugernavn;
             $_SESSION["rank"] = $rank;
             $_SESSION["profilbillede_godkendt"] = $profilbillede_godkendt;

             if($_SESSION["logged_in"] == true)
             {
                 echo "godkendt";
             }
             else
             {
                 echo "<p>Desværre prøve igen brugernavn eller adgangskode passe ikke med vores</p>";
             }
         }
         else
         {
             echo "<p>Skrive brugernavn og Password</p>";
         }
     }
     }

就是说这里;

$password = $hash;

创建部分工作正常,因为它会生成一个长密码。但问题是当我登录页面时。

希望你能帮我

4

1 回答 1

0

这里:

function godkendt_bruger_login(){
          $password = $_POST["pass"];
          $algorithm = '$6$'; //<--- Dette betyder SHA 512
          $salt = $this->generateSalt(16); //<--- SHA 512 bruger et 16 tegn langt salt
         if($stmt = $this->mysqli->prepare('SELECT `id`, `brugernavn`, `rank`, `profilbillede`, `profilbillede_godkendt` FROM `bruger` WHERE `brugernavn` = ? AND `password` = ?'))
         {
         $stmt->bind_param('ss', $brugernavn, $password);
         $brugernavn = $_POST["brugernavn"];
         /* ---> */ $password = $hash;
         $stmt->execute();

您正在尝试初始化$password$hash而函数范围内没有$hash定义。

正如你的错误正确地说:

注意:未定义的变量:第 216 行 /home/jesperbo/public_html/mebe/function/function.php 中的哈希

它只是让你注意到它$hash不存在,它将被转换,在=- 表达式中NULL,所以是$password; 这显然是您不想要的行为。

于 2012-11-18T18:08:00.960 回答