加密的字符串未正确存储在数据库中

时间:2013-08-16 18:49:47

标签: c# string encryption salt

我正在用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();

如果您需要任何进一步的信息,请与我们联系。我只是不想在这里过多地谈论我的确切算法或结果。

谢谢。

1 个答案:

答案 0 :(得分:2)

尝试使用Convert.ToBase64String()代替将字节数组编码为字符串。这应该可以解决你的问题。