Tôi mới sử dụng C# và đây là câu hỏi đầu tiên của tôi ở đây vì vậy tôi xin lỗi trước vì bất kỳ vi phạm giả mạo nào.Xác nhận hàm băm muối
Bối cảnh:
Khi đăng ký sử dụng tôi gọi phương thức CreateSaltedHash() và vượt qua nó người sử dụng đầu vào mật khẩu từ các trường văn bản. Phương thức này salts và băm mật khẩu trước khi lưu trữ nó trong cột Password trong bảng User của tôi.
Câu hỏi:
Làm thế nào tôi nên xác nhận lại mật khẩu khi người dùng cố gắng đăng nhập?
Nếu tôi gọi phương thức CreateSaltedHash() một lần nữa nó sẽ không khớp với muối ngẫu nhiên.
Tôi có nên lưu trữ các muối trong một cột riêng biệt không? Tôi có nên sử dụng dấu phân cách khi tạo hàm băm muối không? Cách an toàn nhất để xác nhận mật khẩu đầu vào dựa vào mật khẩu muối và băm là gì?
Mã số: Đây là những gì tôi có cho đến nay.
public class PasswordHash
{
public const int SALT_BYTES = 32;
/*
* Method to create a salted hash
*/
public static byte[] CreateSaltedHash(string password)
{
RNGCryptoServiceProvider randromNumberGenerator = new RNGCryptoServiceProvider();
byte[] salt = new byte[SALT_BYTES];
randromNumberGenerator.GetBytes(salt);
HashAlgorithm hashAlgorithm = new SHA256Managed();
byte[] passwordByteArray = Encoding.UTF8.GetBytes(password);
byte[] passwordAndSalt = new byte[passwordByteArray.Length + SALT_BYTES];
for (int i = 0; i < passwordByteArray.Length; i++)
{
passwordAndSalt[i] = passwordByteArray[i];
}
for (int i = 0; i < salt.Length; i++)
{
passwordAndSalt[passwordByteArray.Length + i] = salt[i];
}
return hashAlgorithm.ComputeHash(passwordAndSalt);
}
public static bool OkPassword(string password)
{
//This is where I want to validate the password before logging in.
}
}
Gọi phương thức trong lớp ký.
User user= new User();
user.password = PasswordHash.CreateSaltedHash(TextBoxUserPassword.Text);
'Tôi có nên lưu trữ muối trong cột riêng biệt' - Có. Sau đó tham chiếu đến điều đó. – TheGeekZn
Bạn có hiểu rằng có một vấn đề nghiêm trọng với phương pháp của bạn phải không? Bạn thực sự cần phải sử dụng một thiết kế thuật toán hasing để bảo mật mật khẩu mà lựa chọn hiện tại của bạn không phải là một lựa chọn tốt. –
Tôi đã chỉnh sửa tiêu đề của bạn. Vui lòng xem, "[Câu hỏi có nên bao gồm" thẻ "trong tiêu đề của họ không?] (Http://meta.stackexchange.com/questions/19190/)", trong đó sự đồng thuận là "không, họ không nên". –