2009-02-24 18 views
10

Tôi cần phải nhập muối và băm một số mật khẩu để tôi có thể lưu trữ chúng một cách an toàn trong cơ sở dữ liệu. Bạn có lời khuyên hay ý tưởng nào về cách tốt nhất để làm điều này bằng cách sử dụng LINQ to SQL không?Chốt mật khẩu và quấy rối bằng cách sử dụng LINQ to SQL

+0

sử dụng này: http://encrypto.codeplex.com/ – Omu

Trả lời

25

LINQ to SQL không có nhiều sự liên quan trong trường hợp này. Bạn có thể sử dụng bất kỳ cơ chế nào bạn muốn, bởi vì bạn sẽ không làm băm và muối trong SQL.

Các bước để lưu mật khẩu sẽ đi dọc theo những dòng:

  1. Nhận mật khẩu như dạng cleartext, cùng với ID của người dùng.
  2. Tạo (và nhớ) muối.
  3. Kết hợp muối với văn bản mật khẩu, ví dụ: thêm hoặc thêm vào nó.
  4. Băm văn bản kết quả bằng hàm băm của bạn
  5. Lưu trữ ID người dùng, hàm băm và muối trong DB của bạn.

Các bước để xác minh một mật khẩu sẽ đi dọc theo những dòng:

  1. Nhận mật khẩu như dạng cleartext, cùng với ID của người dùng.
  2. Truy xuất hàm băm và muối từ DB cho ID người dùng được cung cấp.
  3. Kết hợp muối với văn bản mật khẩu được cung cấp.
  4. Băm văn bản kết quả bằng hàm băm của bạn.
  5. So sánh hàm băm từ hàm với hàm băm được lấy từ DB.
  6. Nếu chúng bằng nhau, mật khẩu đã cung cấp là chính xác.
+0

Là nó thường để tạo và lưu trữ muối cho mỗi mật khẩu, trái ngược với việc có một muối chung để kết hợp với mỗi mật khẩu nhận được? Cấp, nó "có vẻ" an toàn hơn, nhưng kể từ khi muối chỉ được lưu trữ trong cơ sở dữ liệu anyway ... Chỉ cần tự hỏi. – JMD

+0

Có, chắc chắn cho mỗi người dùng muối - xem xét một kẻ tấn công với cơ sở dữ liệu mật khẩu băm. Với mỗi người dùng muối mỗi mật khẩu đoán, băm anh ta chỉ có thể được so sánh với một mục, với một muối, anh ta có thể so sánh nó với tất cả các mật khẩu băm. –

+0

cầu vồng bảng FTW, nhiều muối càng tốt – ShuggyCoUk

1

Về cơ bản là @Vojislav nói.

Bạn có thể muốn xem bcrypt để băm - nó có uy tín là rất tốt.

0

Nếu nó là dành cho tài khoản người dùng đăng nhập bạn không muốn chỉ là muối + băm mật khẩu, bạn cũng muốn sử dụng kéo dài khóa theo PBKDF2 trong tài liệu RFC2898.

Đây là API để làm những gì bạn cần với ví dụ sử dụng: https://sourceforge.net/projects/pwdtknet

Cũng tạo crypto muối ngẫu nhiên ở chiều dài nhất định

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