【发布时间】:2022-02-15 00:41:57
【问题描述】:
我想将我的身份验证从 sha-1 转移到 sha 256,但是,即使我创建了一个散列器,我也收到一个错误,指出它无法使用 sha1 进行身份验证。代码中没有对这个旧机制的引用,我已经在我的 mongo DB 中创建了一个 sha256 用户。这意味着它以某种方式默认为旧版本。查看代码我收到警告说 MongoClientSettings 已过时但浏览网页我没有看到替代方案,除非我打算使用连接字符串代替? mongo 客户端的文档仍然接受构造函数中的 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;
}
我创建的哈希非常基本,密码应该在此代码输入数据库之前进行哈希处理。
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);
}
}
}
}
【问题讨论】: