2013-06-01 34 views
6

Chức năng password_verify() trong API mật khẩu PHP mới sẽ kiểm tra nếu mật khẩu tương ứng với hàm băm. Hàm băm được tạo bởi password_hash(), theo mặc định, sử dụng một muối ngẫu nhiên và cost = 10.Làm cách nào để password_verify xác thực mật khẩu mà không biết muối và chi phí?

Tôi luôn nghĩ (mặc dù tôi chưa bao giờ nghiên cứu nó) rằng bạn phải lưu trữ muối bên trong cơ sở dữ liệu và sau đó khi bạn muốn xác minh mật khẩu, hãy băm bằng muối đã cho bằng cách sử dụng cùng một chi phí. Làm thế nào để password_verify() kiểm tra mật khẩu mà không biết muối và chi phí?

Trả lời

6

Chuỗi được trả về bởi password_hash() không chỉ chứa hàm băm mà còn chứa thuật toán, chi phí và muối.

+0

... đó là một ý tưởng tuyệt vời # $ @% ... tại sao không ai từng nghĩ về điều đó trước đây? Tôi nghĩ rằng để lưu trữ cũng là một "phiên bản mật khẩu", vì vậy nếu tôi thay đổi thuật toán, những người có "băm cũ" đã có thể đăng nhập anyway ... nhưng với API này không cần phải làm tất cả những thứ đó! –

+1

Vâng, hy vọng các nhà phát triển PHP cuối cùng sẽ cho phép 'md5() 'nghỉ hưu ngay bây giờ. –

+0

@LucasMalor - Đây không phải là một phát minh mới, chức năng của PHP 'crypt()' đã làm như vậy mọi lúc, và đây là hàm làm việc phía sau 'password_hash()'. – martinstoeckli

Các vấn đề liên quan