Bối cảnh Bạn không bao giờ ... thực sự ... cần biết mật khẩu của người dùng. Bạn chỉ muốn xác minh người dùng đến biết mật khẩu của tài khoản.
băm: Lưu trữ mật khẩu người dùng được băm (mã hóa một chiều) qua hàm băm mạnh. Tìm kiếm "mật khẩu mã hóa C#" cung cấp một tải ví dụ.
Xem online SHA1 hash creator để biết ý nghĩa của hàm băm (Nhưng không sử dụng hàm SHA1 làm hàm băm, hãy sử dụng hàm mạnh hơn như SHA256).
Bây giờ, mật khẩu băm có nghĩa là bạn (và kẻ trộm cơ sở dữ liệu) không được phép đảo ngược mã băm đó trở lại mật khẩu ban đầu.
Cách sử dụng: Tuy nhiên, bạn nói, làm cách nào để sử dụng mật khẩu được nén này được lưu trữ trong cơ sở dữ liệu?
Khi người dùng đăng nhập, họ sẽ đưa cho bạn tên người dùng và mật khẩu (trong văn bản gốc) Bạn chỉ cần sử dụng cùng mã băm để băm nhập mật khẩu để lấy phiên bản đã lưu trữ.
Vì vậy, hãy so sánh hai mật khẩu được băm (băm cơ sở dữ liệu cho tên người dùng và mật khẩu băm được nhập & băm). Bạn có thể biết liệu "những gì họ nhập" khớp với "những gì người dùng ban đầu đã nhập cho mật khẩu của họ" hay không bằng cách so sánh băm của họ.
tín dụng phụ:
Câu hỏi: Nếu tôi có cơ sở dữ liệu của bạn, sau đó có thể tôi không chỉ mất một cracker như John the Ripper và bắt đầu thực hiện băm cho đến khi tôi tìm thấy trận đấu để lưu trữ của bạn, băm mật khẩu ? (vì người dùng chọn các từ ngắn, từ điển ... nên dễ dàng)
Trả lời: Có ... có thể.
Vì vậy, bạn nên 'muối' mật khẩu của mình. Xem Wikipedia article on salt
Xem "How to hash data with salt" C# example
Bất kể bạn làm gì, nếu bạn sử dụng mã hóa, không lưu khóa trong mã như một áp phích trước được đề cập. Đó chỉ là thực hành kém. – Woody
'Cách thực hiện mật khẩu phải không?' là một câu hỏi quan trọng. Đó là một vấn đề khó khăn và những sai lầm có hậu quả nghiêm trọng (nhớ lại những gì đã xảy ra với Tesco và LinkedIn). Tôi nghĩ rằng câu hỏi này nên được mở lại tại http://programmers.stackexchange.com –
Tốt hơn là nên tuân theo các tiêu chuẩn - xem http://en.wikipedia.org/wiki/PBKDF2 Bạn chỉ phải tìm cách triển khai trong ngôn ngữ –