我正在用C#做一些加密任务,遇到了一个我无法弄清楚的问题。我有时会为用户密码获取非常复杂的盐渍哈希字符串,并且由于某些原因,这些字符串无法正确存储在数据库中。
我正在使用从RNGCryptoServiceProvider
类中随机生成的8字节盐。我使用SHA256Managed
类作为我的HashAlgorithm
。我从通过ASCIIEncoding.Default.GetString()
方法创建的字节中获取要存储的字符串。存储这些值的列的类型为(NVARCHAR(50), NULL)
。我正在使用SqlCommand
类存储它们。
在单步执行代码并使用即时窗口时,我可以看到确切的字符串。当我打电话给cmd.ExecuteNonQuery()
时,似乎问题正在发生。我应该采用与下面不同的方式吗?
string query = @"UPDATE User SET password = @password WHERE id = @userID";
cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@password", encryptedPassword);
cmd.Parameters.AddWithValue("@userID", userID);
int rowsAffected = cmd.ExecuteNonQuery();
如果您需要任何进一步的信息,请与我们联系。我只是不想在这里过多地谈论我的确切算法或结果。
谢谢。
答案 0 :(得分:2)
尝试使用Convert.ToBase64String()
代替将字节数组编码为字符串。这应该可以解决你的问题。