-6
我試圖拉從表中加密的密碼,但我接收此錯誤:Asp.net密碼加密和解密用的鹽
System.Data.SqlClient.SqlException:轉換轉換爲nvarchar值「84p37U29dna08XhUdV失敗時+ bhQ =='爲數據類型int。
其中值是我的加密密碼。我不明白爲什麼會有這個錯誤。該代碼在以下行中斷:dataAdapter.Fill(dataSet);
protected bool attemptLogin(String username, String password)
{
bool validLogin = false;
String sql = "SELECT Users.username, Passwords.password " +
"FROM Users INNER JOIN Passwords ON Users.userID = Passwords.password " +
"WHERE Users.username = @username";
SqlCommand command = new SqlCommand(sql, dbConnection);
command.Parameters.AddWithValue("@username", username);
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
// Set of Tables (in this instance, just one)
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
// First Table in DataSet
DataTable table = dataSet.Tables[0];
// Get value of password (should be in encrypted form)
String dbPassword = table.Rows[0]["password"].ToString();
// Decrypt password
String decryptedPassword = decryptText("", dbPassword);
if (decryptedPassword.Equals(password))
{
validLogin = true;
}
return validLogin;
}
忽略你遇到的錯誤,你的技術從根本上是有缺陷的。你不要解密密碼!你存儲一個鹽漬散列,添加鹽並散列給定的密碼並與存儲的值進行比較。 –
@MitchWheat然而,你不需要存儲一個鹽漬的散列。我使用Buffer.BlockCopy和BitConverter的組合以及安全的散列/鹽生成器來存儲密碼的散列,實際上它是散列的散列。 –
@cFrozenDeath只要所有的信息都存儲在一個單獨的字段中,你就再次容易受到醃製目標要解決的攻擊(即彩虹表)的攻擊。 – Rob