2009-12-01 27 views
10

Trong ứng dụng web ASP.NET của tôi, tôi đang băm mật khẩu người dùng của mình với SHA512.Lưu trữ một mật khẩu SHA512 băm trong cơ sở dữ liệu

Mặc dù có nhiều SO'ing và Googling tôi không rõ làm thế nào tôi nên lưu trữ chúng trong cơ sở dữ liệu (SQL2005) - mã dưới đây cho thấy những điều cơ bản về cách tôi tạo băm như một chuỗi và tôi hiện đang chèn nó vào cơ sở dữ liệu vào một cột Char (88) vì nó có vẻ là độ dài được tạo một cách nhất quán

Giữ nó như một chuỗi cách tốt nhất để làm điều đó, nếu như vậy sẽ luôn là 88 ký tự trên SHA512 (như tôi đã thấy một số nội dung lạ lùng trên Google)?

Dim byteInput As Byte() = Encoding.UTF8.GetBytes(sSalt & sInput) 
Dim hash As HashAlgorithm = New SHA512Managed() 
Dim sInsertToDatabase As String = Convert.ToBase64String(hash.ComputeHash(byteInput)) 
+0

Hãy xem [liên kết văn bản] (http://altairiswebsecurity.codeplex.com)/nếu bạn muốn sử dụng tư cách thành viên asp.net. Nó có cấu trúc bảng rất mở, do đó có thể dễ dàng tích hợp với cơ sở dữ liệu hiện tại của bạn. – jhexp

Trả lời

15

SHA512 xuất ra 512 bit hoặc 64 byte. Bạn có thể lưu trữ 64 byte đó trong một cột nhị phân, nếu bạn muốn.

Nếu bạn muốn xử lý băm bên ngoài ứng dụng của bạn thì thoải mái hơn khi lưu trữ chuỗi Base64, như bạn đang làm bây giờ. Base64 thêm khoảng 33% chi phí liên tục, vì vậy bạn có thể mong đợi chuỗi luôn là 88 ký tự.

Điều đó nói rằng, ASP.NET có nội dung dựng sẵn fairly comprehensive authentication system, bạn nên sử dụng.

+0

Một mảng byte trong bản đồ .NET trực tiếp tới BINARY (hoặc VARBINARY) trong T-SQL – RickNZ

+0

Cảm ơn @RickNZ - được đánh giá cao. – Chris

+1

Cảm ơn @Vinko cho tất cả các làm rõ - Tôi thích sở hữu mô hình bảo mật và hiểu chính xác những gì đang xảy ra ở đâu và biết rằng tôi có thể cổng khả năng sử dụng của các mật khẩu từ ASP.NET bất cứ lúc nào - Tôi đã bị cắn ở đó trước. Có lẽ sai lầm, chắc chắn không phải là tôi là một kẻ kiểm soát hay bất cứ điều gì;) – Chris