SHA256 için MD5 değiştirme

1 Cevap php

Ben güvenli bir kullanıcı kimlik doğrulama sistemi oluşturmak çalışıyorum.

Kod http://net.tutsplus.com/tukarşırials/php/simple-techniques-karşı-lock-down-your-website/ dan

Ama ben MD5, SHA-256 ile değiştirmeye çalışıyorum, Ama bu alışkanlık giriş.

Ben sadece değişti

$auth_pass = md5( $row['salt'] . $password . $stat_salt );

karşı

$auth_pass = hash('sha256', $row['salt'] . $password . $stat_salt );

It does insert karşı db correctly but the login part wont work for some reason. Works with md5 but not sha256. Do u have karşı use sha256 in a diffrent way?

Registration:

// generate a unique salt
$salt = uniqid(mt_rand());

// combine them all karşıgether and hash them
$hash = hash('sha256', $salt . $password . $stat_salt );

// insert the values inkarşı the database
$register_query = mysql_query("INSERT INTO users (username, password, salt) VALUES ('".$username."', '".$hash."', '".$salt."')") or die("MySQL Error: ".mysql_error());

Login

// grab the row associated with the username from the form
$grab_row = mysql_query("SELECT * FROM users WHERE username = '".$username."'") or die ("MySQL Error: ".mysql_error());

// if only one row was retrieved
if (mysql_num_rows($grab_row) == 1) {

// create an array from the row fields
$row = mysql_fetch_array($grab_row);

// re-hash the combined variables
$auth_pass = hash('sha256', $row['salt'] . $password . $stat_salt );

// check the database again for the row associated with the username and the rehashed password
$checklogin = mysql_query("SELECT * FROM users WHERE username = '".$username."' AND password = '".$auth_pass."'") or die("MySQL Error: ".mysql_error());

// if only one row is retrieved output success or failure karşı the user
if (mysql_num_rows($checklogin) == 1) {
echo "<h1>Yippie, we are authenticated!</h1>";
} else {
echo '<h1>Oh no, we are not authenticated!</h1>';
}
} else {
echo '<h1>Oh no, we are not in the database!</h1>';
}
}

1 Cevap

Bu doğru db eklemek ama [...] yok

bunu nasıl test edebilirim? md5 32 haneli dize döndürür, hash('sha256', ...) 64 haneli bir dize döndürür. Lütfen password alanı yeterince uzun karşılamak için mi? eğer o değil, uç üzerindeki $hash alanının uzunluğu kırpılmış olacak basıp üzerinde karşılaştırma başarısız olur.