2015-10-14 38 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选项。现在优选使用默认生成的盐。