我想创建一个基本的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想要检索散列密码并将其与散列用户输入进行比较,而不是从数据库的散列值中获取原始密码。 –