Ich suche Daten zu verschlüsseln. Ich möchte Verschlüsselungsschlüssel basierend auf einem Passwort und einigen beweglichen Wert, wie Zeit generieren. Das Ziel ist es, den Schlüssel zu ändern, aber jeder, der das Passwort kennt, kann entschlüsseln. Dies geschieht in C#. Ich verwende den folgenden Code, um das Passwort zu hashen.Wie würden Sie einen wiederholbaren Verschlüsselungsschlüssel generieren?
private static string GetPasswordHash(string password)
{
TimeSpan span = (DateTime.UtcNow - new DateTime(1900, 1, 1));
string result = Convert.ToInt32(span.TotalHours).ToString();
result += password;
result += Convert.ToInt32(span.TotalDays).ToString();
result = Convert.ToBase64String(SHA256.Create().ComputeHash(Encoding.ASCII.GetBytes(result)));
return result;
}
Ich benutze dann diesen Hash, plus ein Salz, um einen Schlüssel zu generieren.
Rfc2898DeriveBytes rdb = new Rfc2898DeriveBytes(GetPasswordHash(password), salt);
rdb.IterationCount = 1000;
RijndaelManaged rm = new RijndaelManaged();
rm.KeySize = 256;
rm.Key = rdb.GetBytes(32);
rm.IV = rdb.GetBytes(16);
Es scheint Probleme mit der Art, wie ich dies tue. Einige der Computer befinden sich in unterschiedlichen Zeitzonen, oder wenn die Stunde anläuft, während ich die Daten sende, oder wenn die Maschinenzeiten geringfügig abweichen. Gibt es bessere Vorschläge?