【发布时间】: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。