我不知道怎么用盐

时间:2014-01-16 08:46:43

标签: php salt

这是我的注册码:

<?php 

session_start();  //Must Start a session. 

require "config.php"; //Connection Script, include in every file! 

//Check to see if the user is logged in. 
//'isset' check to see if a variables has been 'set' 
if(isset($_SESSION['username'])){ 
header("location: members.php"); 
} 

//Check to see if the user click the button 
if(isset($_POST['submit'])) 
{ 
//Variables from the table 
$user  = $_POST['user']; 
$pass  = $_POST['pass']; 
$rpass = $_POST['rpass']; 
$email = $_POST['email'];

//Prevent MySQL Injections 
$user  = stripslashes($user); 
$pass  = stripslashes($pass); 
$rpass = stripslashes($rpass);
$email = stripslashes($email); 

$user  = mysqli_real_escape_string($con, $user); 
$pass  = mysqli_real_escape_string($con, $pass); 
$rpass = mysqli_real_escape_string($con, $rpass); 
$email = mysqli_real_escape_string($con, $email); 


//Check to see if the user left any space empty! 
if($user == "" | $pass == "" | $rpass == "" | $email == "") 
{ 
  echo "Alstublieft, vul alle vakjes in!"; 
} 

else 
{ 
  //Check too see if the user's Passwords Matches! 
  if($pass != $rpass) 
  { 
     echo "Passworden komen niet overeen! Probeer het opnieuw"; 
  } 

  //CHECK TO SEE IF THE USERNAME IS TAKEN, IF NOT THEN ADD USERNAME AND PASSWORD INTOT HE DB 
  else 
  { 
     //Query the DB 
     $query = mysqli_query($con,"SELECT * FROM users WHERE username = '$user'") or die("Kan het niet in de tabel zetten!"); 

     //Count the number of rows. If a row exist, then the username exist! 
     $row = mysqli_num_rows($query); 
     if($row == 1) 
     { 
        echo "Sorry, maar die username is al in gebruik! Probeer het opnieuw."; 
     } 

     //ADD THE USERNAME TO THE DB 
     else 
     { 
        $add = mysqli_query($con,"INSERT INTO users (id, username, password, email) VALUES (null, '$user' , '$pass', '$email') ") or die("Kan niet toevoegen!"); 
        echo "Gelukt! <a href='login.php'> Klik hier </a>om in te loggen!"; 
     } 


   }       

  } 

} 
?> 

但我如何在其中使用盐? 我知道这是一个额外的安全性,但我不知道如何使用它。 我在互联网上查看了一些代码,但每次都无法使用。

3 个答案:

答案 0 :(得分:2)

在使用salt之前,您应该考虑以密码形式存储密码。这意味着有人查看您的数据库无法看到密码纯文本。 salt对纯文本密码没有帮助。盐可以保护密码,防止所谓的“彩虹表攻击”。

为方便起见,password_hash()已经使用随机生成的盐完全哈希密码。只需将结果放入数据库即可。

要检查用户提供的密码是否与数据库中存储的密码匹配,请使用password_verify()

答案 1 :(得分:0)

要创建密码哈希,请使用crypt()功能。您可以将salt指定为可选参数:

$hashed_password = crypt( $password, "mysalt" );

$hashed_password现在包含密码的加密哈希值。提供salt,而不是让系统自动为您生成一个,将生成一个PHP 5.6以上的E_NOTICE。指定自己的盐更安全。

密码的加密哈希现在包含salt,并且在进行比较时可以用作salt。因此,在对用户进行身份验证时,如果$password包含用户指定的密码,则可以将其比较如下:

if( crypt( $password, $hashed_password ) == $hashed_password ) {
    // Password matches
}

答案 2 :(得分:-1)

当您想使用盐时,您真正需要做的是:

$passwordForDB = md5('your_salt_string_here'.$pass);

进行注册时。

然后在登录脚本中执行以下操作:

$password = md5('your_salt_string_here'.$_POST['pass']);

if ($passwordFromDB = $password) {
 echo 'Hi User!';
}

这就是我们所说的盐,它只是混合加密数据,如生成的密钥或密码哈希

PHP还为您提供了功能

password_hash()

我建议你在文档中查看。您可以使用salt ther,只需将您的salt字符串与您要哈希的密码连接起来