Bạn nên sử dụng một tên người dùng băm, Mật khẩu và muối với nhau, như:
hash(length(username)+"_veryuniquesalt4rtLMAO"+username+password)
Bằng cách đó, cơ sở dữ liệu của bạn không phải là dễ bị tổn thương cho bất kỳ bảng cầu vồng hiện có, vì muối, và với tên người dùng băm cùng với mật khẩu, bạn cũng không thể tạo bảng cầu vồng cho phương pháp băm cụ thể của mình.
Sử dụng thuật toán băm "chậm" sẽ bảo vệ mật khẩu tốt hơn, giống như chúng phức tạp hơn, nhưng đó là sự cân bằng, khi bạn đã quyết định mức độ chậm nhất định, bạn không thể chỉ thu nhỏ lại khi bạn cần hiệu suất cho những thứ khác.
Cũng có thể thực hiện các ứng dụng băm chậm bằng JavaScript, theo cách đó nó sẽ không phải là vấn đề hiệu suất, nhưng tất nhiên, phương pháp này sẽ yêu cầu JavaScript được bật.
Không có vấn đề gì bạn chọn, một chút chậm lại là tốt hơn nhiều so với không có gì, sử dụng 1 mili giây thay vì 1 micro giây và bảo vệ của bạn mạnh hơn 1000 lần.
Bạn có thể sử dụng bcrypt, hoặc bạn có thể thực hiện một thuật toán băm thông thường làm nhiều công việc phụ, chỉ cần đảm bảo rằng công việc phụ không phải là nối chuỗi chủ yếu.
Cuối cùng, tốt hơn là không lấy được cơ sở dữ liệu bị đánh cắp, rất nhiều mật khẩu yếu đến mức chúng dễ dàng tách ra bất kể bạn làm gì.
Cảm ơn Martin, tôi hiểu điều đó. Đó là một câu hỏi hẹp và xứng đáng là một câu trả lời hẹp. – Hissohathair