Ich weiß nicht, ob dies der richtige Ort ist, um Fragen zu stellen, aber ich habe ein Problem mit Hash-Passwörtern für MySql Backend. Ich betreibe Mosquitto 1.4.3 Broker und ich habe die mosquitto-auth-plugin funktioniert auf dem gleichen Server. Aber ich möchte das Auth-Plugin auf einen neuen Server verschieben. Also habe ich ein Admin-Programm in C# erstellt, um Benutzer und Zugriffskontrollen hinzuzufügen, aber ich kann nicht scheinen, um den richtigen Hash-Code für das Passwort zu bekommen.Generieren von Hash-Passwörtern in C#
Hat jemand das implementiert oder gibt es einige resoucres verfügbar, um den richtigen Hash zu erstellen?
Ich habe schon versucht, diese Hash It Right
private const int SaltByteLength = 12;
private const int DerivedKeyLength = 24;
public string CreatePasswordHash(string password)
{
var salt = GenerateRandomSalt();
var iterationCount = GetIterationCount();
var hashValue = GenerateHashValue(password, salt, iterationCount);
var iterationCountBtyeArr = BitConverter.GetBytes(iterationCount);
var valueToSave = new byte[SaltByteLength + DerivedKeyLength + iterationCountBtyeArr.Length];
Buffer.BlockCopy(salt, 0, valueToSave, 0, SaltByteLength);
Buffer.BlockCopy(hashValue, 0, valueToSave, SaltByteLength, DerivedKeyLength);
Buffer.BlockCopy(iterationCountBtyeArr, 0, valueToSave, salt.Length + hashValue.Length, iterationCountBtyeArr.Length);
return Convert.ToBase64String(valueToSave);
}
private int GetIterationCount()
{
return 901;
}
private static byte[] GenerateRandomSalt()
{
var csprng = new RNGCryptoServiceProvider();
var salt = new byte[SaltByteLength];
csprng.GetBytes(salt);
return salt;
}
private static byte[] GenerateHashValue(string password, byte[] salt, int iterationCount)
{
byte[] hashValue;
var valueToHash = string.IsNullOrEmpty(password) ? string.Empty : password;
using (var pbkdf2 = new Rfc2898DeriveBytes(valueToHash, salt, iterationCount))
{
hashValue = pbkdf2.GetBytes(DerivedKeyLength);
}
return hashValue;
}
Ich kann versuchen und raten, aber es gibt absolut keinen Zusammenhang dafür, warum dies mit MQTT, Mosquttio markiert ist. Aktualisiere die Frage mit dem Warum oder ich entferne die Tags – hardillb
Stimmen sie nicht überein, wenn du 'CreatePasswordHash' erneut mit dem gleichen Passwort anrufst? Mach das Salz nicht zufällig. Schnellbearbeitung - Ich meine, mach es nicht für jeden statisch. Es sollte verfolgt oder mit dem Konto verknüpft werden, für das das Passwort bestimmt ist. Es ist jedes Mal einzigartig, wenn es angerufen wird, so dass es niemals übereinstimmt, wenn es zweimal aufgerufen wird. – TyCobb
Nun, Sie können es bei der ersten Generierung zufällig machen, aber Sie müssen dieses Salz * speichern *, damit Sie es in Zukunft wiederverwenden können, wenn Sie eine eingehende Authentifizierungsanfrage überprüfen. –