我正在尋找加密數據。我想根據密碼生成加密密鑰,以及一些移動的值,如時間。我們的目標是進行關鍵性的改變,但任何知道密碼的人都可以解密。這發生在C#中。我正在使用以下代碼來散列密碼。您將如何生成可重複加密密鑰?
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;
}
然後我使用該散列,再加上一個鹽來生成一個鍵。
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);
似乎有問題與我這樣做的方式。某些計算機處於不同的時區,或者如果在我發送數據時小時打勾,或者機器時間略有偏差。有更好的建議嗎?