我想創建一個基本的WPF應用程序,它可以在SQL Server 2008中存儲加密的密碼,並且在用戶嘗試登錄時也檢索回密碼,但我收到錯誤下面這篇文章'插入SQL Server 2008時'字符串或二進制數據被截斷'
http://www.dreamincode.net/forums/topic/123865-one-way-encryption/
我讀通彩虹攻擊和鹽和散列後..
我嘗試了一些代碼,但得到一個錯誤
我的錯誤得到的是
字符串或二進制數據將被截斷
我讀這篇文章,並試圖將textbox.text轉換爲字符串,並試圖在密碼輸入texbox只有一個字母,但仍然不工作(「我改變了CONNSTRING出於安全原因的CONNSTRING工作並沒有問題與」)
private void button1_Click(object sender, RoutedEventArgs e)
{
string strPassword;
SqlConnection cs= new SqlConnection("Data Source=STEVEJOBS;Initial Catalog=Test database;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter();
da.InsertCommand = new SqlCommand("INSERT INTO Member_info(Name,Username,Password,Email,Member) VALUES(@Name,@Username,@Password,@Email,@Member)", cs);
da.InsertCommand.Parameters.Add("@Name", SqlDbType.NVarChar).Value = Name_tb.Text;
da.InsertCommand.Parameters.Add("@Email", SqlDbType.VarChar).Value = Email_tb.Text;
da.InsertCommand.Parameters.Add("@Username", SqlDbType.VarChar).Value = Username_tb.Text;
//MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
//byte[] hashedBytes;
//UTF8Encoding encoder = new UTF8Encoding();
//hashedBytes = md5Hasher.ComputeHash(encoder.GetBytes(strPassword));
//SqlParameter paramPwd;
//paramPwd = new SqlParameter("@Password", SqlDbType.Binary, 16);
//paramPwd.Value = hashedBytes;
//da.InsertCommand.Parameters.Add(paramPwd);
da.InsertCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = HashPassword(Password_tb.Text.ToString());
da.InsertCommand.Parameters.Add("@Member", SqlDbType.NText).Value =Myes_rb.Content ;
cs.Open();
da.InsertCommand.ExecuteNonQuery();
cs.Close();
MessageBox.Show("Sucessfully added");
}
static string HashPassword(string pasword)
{
byte[] arrbyte = new byte[pasword.Length];
SHA256 hash = new SHA256CryptoServiceProvider();
arrbyte = hash.ComputeHash(Encoding.UTF8.GetBytes(pasword));
return Convert.ToBase64String(arrbyte);
}
THKS的幫助!
另外,就像注意 - 如果你使用單向密碼,沒有任何奇怪的方式來解碼它們,所以你已經失敗了。即使修復了世界上所有的錯誤,也不會讓你檢索到密碼。使用SHA很容易就可以獲得諾貝爾數學的價格。 – TomTom
我敢打賭我的祕密SHA256.unhash(),它是引發此錯誤的密碼列,Base64每2個輸入字節使用3個字符。 –
認爲OP想要檢索散列密碼並將其與散列用戶輸入進行比較,而不是從數據庫的散列值中獲取原始密碼。 –