所以我成功地成功加密了用户密码并将其发送到数据库等。我只是想知道如何解密或其他方法来检查用户输入是否与数据库匹配密码。每次处理哈希值时,都会创建一个不同的加密密码。使用PHP 4.3
<form method="post" action="">
<input type="text" name="user" id="user">
<input type="password" name="pass" id="pass">
<input type="submit" name="submit">
</form>
<?php
session_start();
require_once("connection.php");
require_once("passEncrypt.php");
if(isset($_POST["submit"])) {
$user = $_POST["user"];
$password = $_POST["pass"];
$pass = encrypt($password);
echo $pass;
}
?>
<?php
function encrypt($pass){
// use blowfish algorithm 10 times
$hash_format="$2a$10$";
$salt_length=22;
$salt = generate_salt($salt_length);
// store this in DB
$format_and_salt = $hash_format . $salt ;
$hash = crypt($pass, $format_and_salt);
return $hash;
}
function generate_salt($length){
// return 32 character random string
$unique_string = md5(uniqid(mt_rand(), true));
// provides valid characters
$base64_string = base64_encode($unique_string);
// replaces + with .
$mod_base64_string = str_replace('+', '.', $base64_string );
// make string correct length
$salt = substr($mod_base64_string, 0, $length);
return $salt;
}
?>
我意识到数据没有被清理或PHP安全等等。我只是在我将代码实现到实际页面之前试图理解如何做到这一点。
答案 0 :(得分:2)
首先:This is not encryption。加密是可逆的。
我根本不会使用此代码:
<?php function encrypt($pass){ // use blowfish algorithm 10 times # blowfish != bcrypt $hash_format="$2a$10$"; $salt_length=22; $salt = generate_salt($salt_length); // store this in DB $format_and_salt = $hash_format . $salt ; $hash = crypt($pass, $format_and_salt); return $hash; } function generate_salt($length){ // return 32 character random string $unique_string = md5(uniqid(mt_rand(), true)); # Insecure RNG // provides valid characters $base64_string = base64_encode($unique_string); // replaces + with . $mod_base64_string = str_replace('+', '.', $base64_string ); // make string correct length $salt = substr($mod_base64_string, 0, $length); return $salt; }
相反,use the password hashing API。没有理由在这里重新发明轮子。
$hash = password_hash($yourPassword, PASSWORD_DEFAULT);
if (password_verify($yourPassword, $hash)) {
// Login successful
}
使用PHP 4.3
Don't use PHP 4。如果你这样做,那么你完全靠自己。