Ant*_*y D 4 c# encryption passwords timezone rijndaelmanaged
我期待加密数据.我想基于密码生成加密密钥,以及一些移动值,如时间.目标是进行密钥更改,但让知道密码的任何人都能够解密.这发生在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;
}
Run Code Online (Sandbox Code Playgroud)
然后我使用该哈希,加上盐来生成密钥.
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);
Run Code Online (Sandbox Code Playgroud)
我这样做的方式似乎有问题.有些计算机位于不同的时区,或者当我发送数据时小时计时,或者机器时间稍微偏离.有更好的建议吗?