1

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

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

谢谢你。

4

1 回答 1

2

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

于 2013-08-16T18:52:46.427 回答