Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để tạo và lưu trữ mật khẩu md5 trong mysql

Chỉnh sửa ngày 11 tháng 11 năm 2017:Hãy chắc chắn xem câu trả lời từ O Jones.

Trước hết MD5 không phải là phương pháp băm tốt nhất mà bạn có thể sử dụng cho việc này, hãy thử sha256 hoặc sha512

Điều đó nói rằng hãy sử dụng hash('sha256') thay vì md5() đại diện cho phần băm của quy trình.

Khi bạn tạo tên người dùng và mật khẩu lần đầu tiên, bạn sẽ băm mật khẩu thô với một số muối (một số ký tự bổ sung ngẫu nhiên được thêm vào mỗi mật khẩu để làm cho chúng dài hơn / mạnh hơn).

Có thể trông giống như thế này xuất hiện từ biểu mẫu người dùng tạo:

$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'); ";

Sau đó, khi đăng nhập, nó sẽ trông giống như sau:

$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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lấy điểm trung bình của 10 sinh viên hàng đầu từ mỗi trường

  2. Lưu ký tự Latinh serbian trong cơ sở dữ liệu

  3. Làm cách nào để ánh xạ một loại bit trong Mysql sang chế độ ngủ đông?

  4. Chèn hàng loạt Hibernate hoạt động như thế nào?

  5. Sử dụng utf8 hay không - Vấn đề mã hóa ký tự MySQL và PHP