2015-03-24 2 views
0

У меня проблема со сценарием. При записи нового пароля пользователя записывается нормально. Я попытался зашифровать с помощью MD5 или sha1, правильно зашифрован в базе данных, но он автоматически изменил значение пароля. Например:Шифрование паролей

Если я зарегистрирую пароль «mypassword», в базе данных зашифровано правильно. Но если я выйду из системы, а затем снова подключусь, введя пароль «mypassword», он не узнает его больше, но распознает только один зашифрованный.

Это не нормально. Я пытаюсь вставить код.

<?php 
session_start(); 
include '../_database/database.php'; 
if(isset($_REQUEST['signup_button'])){ 
    $user_email = $_REQUEST['user_email']; 
    $user_firstname = $_REQUEST['user_firstname']; 
    $user_lastname = $_REQUEST['user_lastname']; 
    $user_username = $_REQUEST['user_username']; 
    $user_password = $_REQUEST['user_password']; 
    $sql="INSERT INTO user(user_firstname,user_lastname,user_email,user_username,user_password,user_joindate,user_avatar) VALUES('$user_firstname','$user_lastname','$user_email','$user_username', '$user_password',CURRENT_TIMESTAMP,'default.jpg')"; 
     mysqli_query($database,$sql) or die(mysqli_error($database)); 
     $_SESSION['user_username'] = $user_username; 
     header('Location: ../update-profile-after-registration.php?user_username='.$user_username); 
    } 
?> 

И

  <form class="form col-md-12 center-block" action="components/registration.php" method="post" autocomplete="off"> 
       <div class="row">  
        <div class="col-lg-6" style="z-index: 9;"> 
         <div class="form-group"> 
          <input type="text" class="form-control input-lg" placeholder="First Name" name="user_firstname" required> 
         </div> 
        </div> 
        <div class="col-lg-6" style="z-index: 9;"> 
         <div class="form-group"> 
          <input type="text" class="form-control input-lg" placeholder="Last Name" name="user_lastname" required> 
         </div> 
        </div> 
       </div> 
      <div class="row">  
       <div class="col-lg-12"> 
        <div class="form-group"> 
         <input type="email" class="form-control input-lg" placeholder="Email Address" name="user_email" required> 
        </div> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-lg-12"> 
        <div class="form-group"> 
         <div class="input-group"> 
          <span class="input-group-addon"> 
           <!-- http://<?php echo $rws['domain_websiteaddress'];?>/user_username= --> know.me/ 
          </span> 
          <input type="username" class="form-control input-lg" placeholder="username" name="user_username" id="user_username" required> 
          <span class="input-group-addon" id="status"></span> 
         </div> 
        </div> 
        </div>  
       </div> 
       <div class="row">  
        <div class="col-lg-12"> 
         <div class="form-group"> 
          <input type="password" class="form-control input-lg" placeholder="pasword" name="user_password" required> 
         </div> 
        </div> 
       </div> 
       <div class="row">  
        <div class="col-lg-6"> 
         <div class="form-group"> 
          <button class="btn btn-primary ladda-button" data-style="zoom-in" type="submit" id="SubmitButton" value="Upload" style="float:left;" name="signup_button"/>Register</button> 
         </div> 
        </div> 
       </div> 
      </form> 
+1

'MD5' и' SHA1' являются * не * алгоритмами шифрования. Это * хэш-алгоритмы *. Также * ни * не должен использоваться больше. Они небезопасны. –

+0

Пожалуйста, посмотрите [password_hash()] (http://www.php.net/manual/en/function.password-hash.php) и [password_verify] (http://www.php.net /manual/en/function.password-verify.php), они подходят для хэш-паролей. – martinstoeckli

+0

Спасибо за ваши ответы, я попробовал пароль_hash, но это дало мне ошибку. Не могли бы вы сделать мне быстрый пример? – Okram92

ответ

0

хэш-алгоритмы MD5 и SHA- * не подходят для хеширования паролей, потому что они слишком быстро и, следовательно, может быть грубой вынуждены слишком легко. Вместо этого следует использовать медленные хэш-функцию с коэффициентом затрат:

// Hash a new password for storing in the database. 
// The function automatically generates a cryptographically safe salt. 
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT); 

// Check if the hash of the entered login password, matches the stored hash. 
// The salt and the cost factor will be extracted from $existingHashFromDb. 
$isPasswordCorrect = password_verify($password, $existingHashFromDb); 

Этот пример показывает, как использовать функцию PHP password_hash() и password_verify(). Они будут производить соленый хэшинг BCrypt.

EDIT:

Хорошо я постараюсь сделать изменения в вашем примере кода. Обратите внимание, что я использовал подготовленные операторы, потому что ваш пример подвержен SQL-инъекции. Код не проверен.

<?php 
session_start(); 
include '../_database/database.php'; 
if(isset($_REQUEST['signup_button'])) 
{ 
    $user_email = $_REQUEST['user_email']; 
    $user_firstname = $_REQUEST['user_firstname']; 
    $user_lastname = $_REQUEST['user_lastname']; 
    $user_username = $_REQUEST['user_username']; 
    $user_password = $_REQUEST['user_password']; 
    $passwordHash = password_hash($user_password); 

    $sql = "INSERT INTO user(user_firstname,user_lastname,user_email,user_username,user_password,user_joindate,user_avatar) VALUES(?,?,?,?,?,CURRENT_TIMESTAMP,'default.jpg')"; 
    $stmt = $database->prepare($sql); 
    $stmt->bind_param('sssss', $user_firstname, $user_lastname, $user_email, $user_username, $passwordHash); 
    $stmt->execute(); 

    $_SESSION['user_username'] = $user_username; 
    header('Location: ../update-profile-after-registration.php?user_username='.$user_username, true, 303); 
    exit; 
} 
?> 
+0

Здравствуйте, спасибо за ваш ответ. Не могли бы вы сказать мне, где разместить эти переменные? Не могли бы вы привести мне пример моего дела? – Okram92

Смежные вопросы