2012-11-18 53 views
0

Heey Guys我的用戶密碼上的鹽

就是這樣,我只喜歡在我身邊這樣做,不僅是sha1。但登錄和其他許多事情會更安全一些。

現在嘗試我做一個例子。

function generateSalt($length) { 
     $alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 
     $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 
    } 
?> 

這表示,在當我需要登錄到網頁:

注意:未定義的變量:散在/ home /在線216上的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; 

創建部分工作正常,因爲它使長密碼。但問題是當我登錄到頁面時。

希望你能幫助我

+0

1.我在這裏沒有得到真正的問題2.無論您的主要語言是什麼,通常都建議您始終使用英語編碼(這意味着代碼和註釋)。3.歡迎使用堆棧溢出。 – Shoe

+0

好的,我會在下一次100%保證的時候嘗試它 –

回答

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

由於您的錯誤正確說:

注意:未定義的變量:散列 /home/jesperbo/public_html/mebe/function/function.php上線216

這只是使您注意到$hash不存在,並且它將在=表達式內部轉換爲NULL以及$password;這顯然是你不想要的行爲。

+0

好的,我會嘗試修復它,以保證下一次我保證100%,這似乎很奇怪,因爲我喜歡在代碼之前下載函數號碼1框,我有一個功能,我稱之爲「函數generere鹽($長度)」。那麼這裏有第二個或錯誤的權利。或者我應該從函數複製它,看起來不僅僅是登錄部分或什麼? –

+0

@JesperPetersen,你可以使用谷歌翻譯嗎? – Shoe

+0

$ jeffrey有一些詞,我無法找到,因爲我使用谷歌翻譯 –