Php md5函数的使用

Php md5函数的使用,php,hash,md5,password-hash,Php,Hash,Md5,Password Hash,关于php。我们如何使用md5加密方法?假设有一个登录表单。当我们需要加密文本时,我们使用 $encryptedtxt=md5('text'); 然后我们将$EncryptedText发送到数据库。现在,如果我们想让$EncryptedText与用户登录时的新输入进行比较,我们应该怎么做?如果我们应该从它的加密形式返回文本,怎么做?Tnx.MD5不再被认为是用于密码哈希的安全工具,它已经有30年的历史了,并且被认为是“坏的” 使用现代方法,包括准备好的陈述 以下是您可以阅读的几篇文章:

关于php。我们如何使用md5加密方法?假设有一个登录表单。当我们需要加密文本时,我们使用

$encryptedtxt=md5('text');

然后我们将$EncryptedText发送到数据库。现在,如果我们想让$EncryptedText与用户登录时的新输入进行比较,我们应该怎么做?如果我们应该从它的加密形式返回文本,怎么做?Tnx.

MD5不再被认为是用于密码哈希的安全工具,它已经有30年的历史了,并且被认为是“坏的”

使用现代方法,包括准备好的陈述

以下是您可以阅读的几篇文章:


从马克塞尔的回答中得出

就用图书馆吧。认真地它们的存在是有原因的

  • PHP5.5+:使用
  • PHP5.3.7+:使用(上述的兼容包)
  • 所有其他:使用
不要自己动手。如果你自己制作盐,你做错了。你应该使用一个为你处理的库

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
登录时:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}

MD5不再被认为是用于密码散列的安全工具,它已经有30年的历史了,被认为是“坏的”

使用现代方法,包括准备好的陈述

以下是您可以阅读的几篇文章:


从马克塞尔的回答中得出

就用图书馆吧。说真的。它们的存在是有原因的

  • PHP5.5+:使用
  • PHP5.3.7+:使用(上述的兼容包)
  • 所有其他:使用
不要自己动手。如果你自己制作盐,你做错了。你应该使用一个为你处理的库

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
登录时:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}

MD5不再被认为是用于密码散列的安全工具,它已经有30年的历史了,被认为是“坏的”

使用现代方法,包括准备好的陈述

以下是您可以阅读的几篇文章:


从马克塞尔的回答中得出

就用图书馆吧。说真的。它们的存在是有原因的

  • PHP5.5+:使用
  • PHP5.3.7+:使用(上述的兼容包)
  • 所有其他:使用
不要自己动手。如果你自己制作盐,你做错了。你应该使用一个为你处理的库

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
登录时:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}

MD5不再被认为是用于密码散列的安全工具,它已经有30年的历史了,被认为是“坏的”

使用现代方法,包括准备好的陈述

以下是您可以阅读的几篇文章:


从马克塞尔的回答中得出

就用图书馆吧。说真的。它们的存在是有原因的

  • PHP5.5+:使用
  • PHP5.3.7+:使用(上述的兼容包)
  • 所有其他:使用
不要自己动手。如果你自己制作盐,你做错了。你应该使用一个为你处理的库

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
登录时:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}


“我们应该怎么做?”-如果这是密码,答案很简单;不要使用它。它已经使用了30年,不再安全。另外,“操作指南”可以在Web上找到。告诉我们您尝试了什么。Tnx!@Fred ii-有没有其他方法比正常方法更安全地保护密码?对于密码存储,请使用或PHP 5.5的函数。对于PHP<5.5,请使用。我在下面为您发布了一个答案,它使用密码和MySQL中的安全方法。您可以阅读一些链接,了解MD5不安全的原因再也没有了。@Sonoo-它没有被弃用,因为md5仍然有完全有效的用途,它不适合密码散列“我们应该怎么做?”-如果这是针对密码的,答案很简单;不要使用它。它已经30年了,不再安全使用了。另外,“操作指南”可以在Web上找到。告诉我们您尝试了什么。Tnx!@Fred ii-有没有其他方法比正常方法更安全地保护密码?对于密码存储,请使用或PHP 5.5的函数。对于PHP<5.5,请使用。我在下面为您发布了一个答案,它使用密码和MySQL中的安全方法。您可以阅读一些链接,了解MD5不安全的原因再也没有了。@Sonoo-它没有被弃用,因为md5仍然有完全有效的用途,它不适合密码散列“我们应该怎么做?”-如果这是针对密码的,答案很简单;不要使用它。它已经30年了,不再安全使用了。另外,“操作指南”可以在Web上找到。告诉我们您尝试了什么。Tnx!@Fred ii-有没有其他方法比正常方法更安全地保护密码?对于密码存储,请使用或PHP 5.5的函数。对于PHP<5.5,请使用。我在下面为您发布了一个答案,它使用密码和MySQL中的安全方法。您可以阅读一些链接,了解MD5不安全的原因再也没有了。@Sonoo-它没有被弃用,因为md5仍然有完全有效的用途,它不适合密码散列“我们应该怎么做?”-如果这是针对密码的,答案很简单;不要使用它。它已经30年了,不再安全使用了。另外,“操作指南”可以在Web上找到。告诉我们您尝试了什么。Tnx!@Fred ii-有没有其他方法比正常方法更安全地保护密码?对于密码存储,请使用或PHP 5.5的函数。对于PHP<5.5,请使用。我在下面为您发布了一个答案,它使用密码和MySQL中的安全方法。您可以阅读一些链接,了解MD5不安全的原因再也没有了。@Sonoo-它并没有被弃用,因为md5仍然有完全有效的用途,它对密码哈希不好,或者你可以把它设为dupe:-)@Dagon当然,但给出下面的另一个答案,我不得不给他们一个“安全”的方法。OP可以用它做任何事情;不管是不是封闭的问题;-)哦,我们知道你只想要简单的重复点:-)@Dagon points不错,当然,但这不是分数,而是给OP“一天中正确的时间”;-)所以我再给你一点,你不能重复太多:-)或者你可以像dupe一样:-)@Dagon sure,但是如果给出下面的另一个答案,我必须给他们一个“安全”的方法。OP c