Sunting 2017/11/09:Pastikan untuk melihat jawaban dari O Jones.
Pertama MD5 bukanlah metode hashing terbaik yang dapat Anda gunakan untuk percobaan ini sha256 atau sha512
Yang mengatakan mari gunakan hash('sha256')
bukannya md5()
untuk mewakili bagian hashing dari proses.
Saat pertama kali membuat nama pengguna dan sandi, Anda akan membuat sandi mentah dengan sedikit garam (beberapa karakter tambahan acak ditambahkan ke setiap sandi untuk membuatnya lebih panjang/kuat).
Mungkin terlihat seperti ini dari formulir buat pengguna:
$escapedName = mysql_real_escape_string($_POST['name']); # use whatever escaping function your db requires this is very important.
$escapedPW = mysql_real_escape_string($_POST['password']);
# generate a random salt to use for this account
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$saltedPW = $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
$query = "insert into user (name, password, salt) values ('$escapedName', '$hashedPW', '$salt'); ";
Kemudian pada saat login akan terlihat seperti ini:
$escapedName = mysql_real_escape_string($_POST['name']);
$escapedPW = mysql_real_escape_string($_POST['password']);
$saltQuery = "select salt from user where name = '$escapedName';";
$result = mysql_query($saltQuery);
# you'll want some error handling in production code :)
# see http://php.net/manual/en/function.mysql-query.php Example #2 for the general error handling template
$row = mysql_fetch_assoc($result);
$salt = $row['salt'];
$saltedPW = $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
$query = "select * from user where name = '$escapedName' and password = '$hashedPW'; ";
# if nonzero query return then successful login