データの暗号化を検討しています。パスワードに基づいて暗号化キーを生成し、時間などの移動値を生成したいと考えています。目標は、キーを変更することですが、パスワードを知っている人なら誰でも復号化できるようにすることです。これは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);
私がこれを行う方法には問題があるようです。一部のコンピューターが異なるタイムゾーンにある場合、またはデータを送信するときに時が刻む場合、またはマシンの時刻がわずかにずれている場合。より良い提案はありますか?