【问题标题】:How to use salt with md5 technique如何通过 md5 技术使用盐
【发布时间】:2016-01-12 13:24:50
【问题描述】:

我已经编写了 md5 技术来将密码存储在哈希中,但我想用 salt 来实现它。

这是我的注册表单 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" );
}
?>

【问题讨论】:

  • 不要使用 md5 存储密码.
  • 我只想知道和sha1比较一下
  • Sha1 也已过时。不要那样做。使用password_hash()
  • 你真的不应该使用 MD5 密码哈希,你真的应该使用 PHP 的 built-in functions 来处理密码安全。如果您使用的 PHP 版本低于 5.5,则可以使用 password_hash() compatibility pack
  • 您不应创建自己的用户和密码处理。尝试使用现成的现成解决方案。我会推荐基于 OAuth 2 的 JBoss Keycloak。还有一个 PHP integration

标签: php hash md5 salt


【解决方案1】:

您不应使用 MD5 或 SHA1 进行散列(即使使用盐),因为它们是 proven to be insecure

使用 salted md5 作为密码是个坏主意。不是因为 MD5 的加密弱点,而是因为它速度快。这意味着攻击者可以在单个 GPU 上每秒尝试数十亿个候选密码。

PHP 现在通过password_hash 函数提供了一种使用更安全的 bcrypt 散列的简单方法,它不仅可以生成强散列,还可以生成随机盐

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

【讨论】:

    【解决方案2】:

    Md5 被认为是不安全的,不再使用,您可以使用password_hash,它默认使用盐来生成强密码散列。只使用几行就更容易了,它就完成了。请记住不要使用您自己的盐和password_hash 盐选项自 PHP 7.0.0 起已被弃用。现在最好使用默认生成的盐。

    【讨论】:

      【解决方案3】:

      Md5 是存储密码的旧方法。请查看以下链接以使用 salt

      哈希密码

      https://crackstation.net/hashing-security.htm

      http://www.sitepoint.com/hashing-passwords-php-5-5-password-hashing-api/

      【讨论】:

        猜你喜欢
        • 2023-02-19
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 2014-02-03
        相关资源
        最近更新 更多