2016-04-18 42 views
0

所以我设法成功加密用户密码并将它发送给数据库等..我只是想知道我将如何去解密或其他方法来检查,看看用户输入与DB密码匹配。每次哈希处理不同的加密密码是created.Using 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

我不完全明白你想要做什么。是否正确,你想要做一些像'decrypt($ pass)'来比较它''密码'? – derlarsschneider

+0

我会使用密码(JavaScript)的客户端散列。 – DanFromGermany

+0

更新PHP至少5.5,2013年6月20日发布,更好的更新到PHP 7.使用'password_hash()'和'password_verify()'。使用旧版本只是攻击者的手中,他们寻找使用旧版本的网站。 – zaph

回答

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。如果你这样做,你完全靠自己。