2015-10-14 65 views
0

我已經編碼md5技術來存儲密碼在哈希,但我想用鹽來實現它。如何使用md5技術鹽

這裏是我的註冊表格php與md5功能,這是完美的工作。

<?php 
require("common.php"); 
if (! empty ($_POST)) { 
    if (empty ($_POST ['username'])) { 
     die ("Please enter a username."); 
    } 
    if (empty ($_POST ['password'])) { 
     die ("Please enter a password."); 
    } 
    $query = "SELECT 1 FROM User WHERE username = :username"; 
    $query_params = array (
      ':username' => $_POST ['username'] 
    ); 
    try { 
     $stmt = $db->prepare ($query); 
     $result = $stmt->execute ($query_params); 
    } catch (PDOException $ex) { 
     die ("Failed to run query: " . $ex->getMessage()); 
    } 
    $row = $stmt->fetch(); 
    if ($row) { 
     die ("This user name is already registered"); 
    } 
    $password = md5($_POST['password']); 
    $query = "INSERT INTO User (username, password) VALUES (:username, :password)"; 
    $query_params = array (
      ':username' => $_POST ['username'], 
      ':password' => $password 
    ); 
    try { 
     $stmt = $db->prepare ($query); 
     $result = $stmt->execute ($query_params); 
    } catch (PDOException $ex) { 
     die ("Failed to run query: " . $ex->getMessage()); 
    } 
    header ("Location: login.php"); 
    die ("Redirecting to login.php"); 
} 
?> 
+5

**不要使用md5來存儲密碼**。 –

+0

我只是想知道將它與sha1進行比較 –

+2

Sha1也是過時的。不要這樣做。使用'password_hash()'。 –

回答

1

您不應該使用MD5或SHA1進行散列(即使使用鹽),因爲它們是proven to be insecure

將salted md5用於密碼是一個壞主意。不是因爲MD5的加密弱點,而是因爲它速度很快。這意味着攻擊者可以在單個GPU上每秒嘗試數十億個候選密碼。

PHP現在提供了使用通過password_hash功能,它不僅產生強烈的哈希更加安全bcrypt哈希一個簡單的方法,但產生一個隨機鹽以及

$password = password_hash($_POST['password'], PASSWORD_DEFAULT); 
1

MD5是考慮不安全,不再使用,您可以使用password_hash默認使用鹽生成強pa雙字哈希。只需使用幾條線就可以輕鬆完成。請記住,不要使用自己的鹽password_hash從PHP 7.0.0開始不推薦使用salt選項。現在優選使用默認生成的鹽。