Có, .NET Framework 2.0 trở lên (đến và bao gồm 4.5 lúc này) triển khai PBKDF2 (còn được gọi là RFC2898 và PKCS # 5v2) trong một lớp có tên là Rfc2898DeriveBytes. Về mặt kỹ thuật, nó triển khai PBKDF2-HMAC-SHA-1, trong khi không tốt như PBKDF2-HMAC-SHA-512, vẫn hợp lý để băm mật khẩu.
Đối số PBKDF2:
- HMAC không phải là đối số cho lớp này - HMAC-SHA-1 được khắc phục trong quá trình triển khai này, vì vậy bạn không phải lo lắng về điều đó.
- Mật khẩu là mật khẩu của người dùng.
- bản rõ, tất nhiên, bị loại bỏ sau khi băm.
- Muối là một chuỗi ngẫu nhiên mã hóa trên mỗi hàng có độ dài đủ (ví dụ: ít nhất 8 byte). Mỗi mật khẩu cần muối ngẫu nhiên riêng của mình vì vậy nếu 300 người dùng chọn "P @ $$ w0rd" làm mật khẩu của họ, kết quả băm sẽ khác nhau.
- muối được lưu trữ ở dạng bản rõ trong cơ sở dữ liệu; bạn cần nó vào lần sau khi bạn tạo hash mật khẩu để xem kết quả có giống nhau hay không.
- Lặp lại là số lần bạn sẽ lặp lại. Đối với bất kỳ phần cứng máy tính để bàn hoặc máy chủ nào, hãy bắt đầu trong hàng chục nghìn và đi lên cho đến khi nó bị đau.
- số lần lặp cũng phải được lưu trữ trong văn bản thuần túy trong cơ sở dữ liệu, do đó sẽ không đáng kể để thay đổi số này sau đó (tức là làm cho nó cao hơn khi tăng công suất xử lý).
- .GetBytes là độ dài đầu ra, bạn đoán nó, byte. Trong trường hợp này, bạn nên sử dụng 20.
- Lý do (thảo luận nâng cao): để băm mật khẩu, không bao giờ lớn hơn kích thước băm gốc, vì kẻ tấn công sẽ không cần tạo nhiều hơn (và tạo kích thước băm gốc + 1 byte mất gấp đôi thời gian, vì nó bắt đầu một tập hợp các lần lặp mới cho mỗi kích thước băm gốc trong độ dài đầu ra, nối các kết quả lại với nhau - kẻ tấn công có thể giả định một cách an toàn rằng nếu kết quả đầu tiên khớp, nó sẽ khớp với nhau và chắc chắn 100% rằng nếu khối đầu tiên không thành công, nó không khớp). Vì lớp này được giới hạn trong SHA-1, kích thước băm gốc là 20 byte. Nếu bạn sử dụng thư viện khác có tùy chọn, SHA-256 là 32 byte, SHA-512 là 64 byte.
Lưu ý rằng HMACSHA512 versus Rfc2898DeriveBytes for password hash chứa một số mã NET mẫu mà tôi đã không được phân tích một cách chi tiết, nhưng có thể là một điểm khởi đầu hữu ích.
Nguồn
2014-02-20 06:55:25
API này hiện đã lỗi thời. –