Я хотел бы переместить мою аутентификацию с sha-1 на sha 256, однако, даже несмотря на то, что я создал хеш, я получаю сообщение об ошибке, утверждающее, что он не может аутентифицироваться с использованием sha1. В коде нет ссылки на этот старый механизм, и я уже создал пользователя sha256 в моей базе данных mon go. Что означает, что по умолчанию это как-то по умолчанию. Глядя на код, я получаю предупреждения о том, что MongoClientSettings устарел, но при просмотре веб-страниц я не вижу альтернативы, если только вместо этого я не собираюсь использовать строку подключения? Документация для клиента mon go все еще принимает mongoClientSettings в конструкторе? Я использую MongoDB версии 4.10 и mongocsharpdriver 2.10
public static MongoClientSettings PrepareMongoSettings(string dbName)
{
MongoClientSettings mongoSettings = new MongoClientSettings();
mongoSettings.Server = new MongoServerAddress(Host, Port);
mongoSettings.ConnectionMode = 0;
if (!string.IsNullOrWhiteSpace(MongoUsername))
{
List<MongoCredential> mongoCredentials = new List<MongoCredential>();
MongoCredential mongoCred = MongoCredential.CreateCredential("admin", MongoUsername, MongoPassword);
mongoCredentials.Add(mongoCred);
mongoSettings.Credentials = mongoCredentials;
}
return mongoSettings;
}
Созданная мною хеш-функция довольно проста c пароль должен быть хеширован до того, как этот код будет введен в БД.
public static class HasherSha256
{
public static byte[] GetPasswordHash(string username, string password)
{
// get salted byte[] buffer, containing username, password and some (constant) salt
byte[] buffer;
using (System.IO.MemoryStream stream = new MemoryStream())
using (System.IO.StreamWriter writer = new StreamWriter(stream))
{
writer.Write("MyDB");
writer.Write(username);
writer.Write(password);
writer.Flush();
buffer = stream.ToArray();
}
return ComputeSha256Hash(buffer);
}
static byte[] ComputeSha256Hash(byte[] rawData)
{
using (SHA256 sHA256 = SHA256.Create())
{
return sHA256.ComputeHash(rawData);
}
}
}
}