Я принимаю систему, которую написал предыдущий разработчик. Система имеет администратор, одобряющий учетную запись пользователя, и когда они делают это, система использует следующий метод для хеширования пароля и сохранения его в базе данных. Он отправляет неуправляемый пароль пользователю. Когда пользователь регистрируется в системе, использует тот же самый метод для хэша, который вводит пользователь и сравнивает его с значением базы данных. Мы запустили пару раз, когда запись в базе данных не соответствует входной сыворотке пользователя, которую они должны. Таким образом, кажется, что метод не всегда хэширует значение одно и то же. Кто-нибудь знает, не является ли этот метод хеширования надежным и как сделать его надежным? Благодарю.пароль хеширования, дающий разные результаты
private string HashPassword(string password)
{
string hashedPassword = string.Empty;
// Convert plain text into a byte array.
byte[] plainTextBytes = Encoding.UTF8.GetBytes(password);
// Allocate array, which will hold plain text and salt.
byte[] plainTextWithSaltBytes =
new byte[plainTextBytes.Length + SALT.Length];
// Copy plain text bytes into resulting array.
for(int i = 0; i < plainTextBytes.Length; i++)
plainTextWithSaltBytes[i] = plainTextBytes[i];
// Append salt bytes to the resulting array.
for(int i = 0; i < SALT.Length; i++)
plainTextWithSaltBytes[plainTextBytes.Length + i] = SALT[i];
// Because we support multiple hashing algorithms, we must define
// hash object as a common (abstract) base class. We will specify the
// actual hashing algorithm class later during object creation.
HashAlgorithm hash = new SHA256Managed();
// Compute hash value of our plain text with appended salt.
byte[] hashBytes = hash.ComputeHash(plainTextWithSaltBytes);
// Create array which will hold hash and original salt bytes.
byte[] hashWithSaltBytes = new byte[hashBytes.Length +
SALT.Length];
// Copy hash bytes into resulting array.
for(int i = 0; i < hashBytes.Length; i++)
hashWithSaltBytes[i] = hashBytes[i];
// Append salt bytes to the result.
for(int i = 0; i < SALT.Length; i++)
hashWithSaltBytes[hashBytes.Length + i] = SALT[i];
// Convert result into a base64-encoded string.
hashedPassword = Convert.ToBase64String(hashWithSaltBytes);
return hashedPassword;
}