Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';字符串或二进制数据被截断';在插入SQL Server 2008时_C#_Sql Server 2008_Passwords - Fatal编程技术网

C# ';字符串或二进制数据被截断';在插入SQL Server 2008时

C# ';字符串或二进制数据被截断';在插入SQL Server 2008时,c#,sql-server-2008,passwords,C#,Sql Server 2008,Passwords,我正在尝试创建一个基本的WPF应用程序,它可以在SQLServer2008中存储一个加密的密码,并在用户尝试登录时检索回密码,但在阅读本文之后,我发现一个错误 我读过彩虹攻击,盐渍和杂凑 我尝试了一些代码,但出现了一个错误 我得到的错误是 字符串或二进制数据将被截断 我读了这篇文章,尝试将textbox.text转换为字符串,还尝试在密码texbox中只键入一个字母,但仍然不起作用(“出于安全原因,我更改了connstring,因为connstring正在工作,没有问题”) 谢谢你的帮助 当您

我正在尝试创建一个基本的WPF应用程序,它可以在SQLServer2008中存储一个加密的密码,并在用户尝试登录时检索回密码,但在阅读本文之后,我发现一个错误

我读过彩虹攻击,盐渍和杂凑

我尝试了一些代码,但出现了一个错误

我得到的错误是

字符串或二进制数据将被截断

我读了这篇文章,尝试将textbox.text转换为字符串,还尝试在密码texbox中只键入一个字母,但仍然不起作用(“出于安全原因,我更改了connstring,因为connstring正在工作,没有问题”)


谢谢你的帮助

当您尝试插入一个字符数超过列定义中指定的字符数的字符串时,会出现此错误。使字符串列更宽

要识别触发此错误的列,可以通过逐个删除参数来更改INSERT语句(删除
da.InsertCommand.parameters.Add
该列的行,并在INSERT语句的值部分放置一个类似“John”的常量)

编辑#1:

继续逐个删除列(就像您对密码列所做的那样),一旦insert语句没有失败,您就会知道是哪个列导致了错误。然后调试以找出要分配给(失败)列参数的值的长度。数据库中该列的长度必须大于您尝试插入的值的长度

另一件需要注意的事情是:在写问题的时候,你认为密码栏是个问题,但也许其他栏是个问题此错误的唯一解决方案是使所有列都足够宽,以便可以在其中存储值

编辑#2:

使用属性获取用户键入的文本:

    da.InsertCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = 
        HashPassword(Password_tb.Password);
要获取哈希密码的长度,请使用以下代码:

    string pwdHash = HashPassword(Password_tb.Password);
    da.InsertCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = pwdHash;

将断点放在第二行,并检查pwdHash字符串的长度。数据库表中的密码列必须等于或大于此长度。

当您尝试插入的字符串的字符数超过列定义中指定的字符数时,会出现此错误。使字符串列更宽

要识别触发此错误的列,可以通过逐个删除参数来更改INSERT语句(删除
da.InsertCommand.parameters.Add
该列的行,并在INSERT语句的值部分放置一个类似“John”的常量)

编辑#1:

继续逐个删除列(就像您对密码列所做的那样),一旦insert语句没有失败,您就会知道是哪个列导致了错误。然后调试以找出要分配给(失败)列参数的值的长度。数据库中该列的长度必须大于您尝试插入的值的长度

另一件需要注意的事情是:在写问题的时候,你认为密码栏是个问题,但也许其他栏是个问题此错误的唯一解决方案是使所有列都足够宽,以便可以在其中存储值

编辑#2:

使用属性获取用户键入的文本:

    da.InsertCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = 
        HashPassword(Password_tb.Password);
要获取哈希密码的长度,请使用以下代码:

    string pwdHash = HashPassword(Password_tb.Password);
    da.InsertCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = pwdHash;

将断点放在第二行,并检查pwdHash字符串的长度。数据库表中的密码列必须等于或大于此长度。

好的,您完全关闭了。你有很多问题。让我们开始:

我正在尝试创建一个基本的WPF应用程序,它可以在SQL中存储加密的密码 当用户尝试登录但我得到一个 阅读本文后出现错误 加密/

失败,被解雇。请参阅,-之所以称为单向散列(不是加密),是因为它是单向的。无法在不破坏密码的情况下检索密码。这个计划永远不会奏效

还尝试在密码框中只键入一个字母,但仍然不起作用

阅读盐腌的工作原理文档。SHA将输入转换为特定长度的二进制随机数。不管你给它输入1个或1000个字符长的密码,结果都是一个固定长度的二进制代码

返回Convert.tobase64字符串(arrbyte)

这是非常不规则的。大多数人会将数组转换为十六进制(固定长度,易于调试读/写)并使用它

无论如何,写出你在这里返回的字符串的长度。根据表格结构长度检查您输入的所有参数。完成了

你的家庭作业仍然不及格——如果不打破,SHA是无法找回的

基本WPF应用程序,可在SQL SERVER 2008和 当用户尝试登录时检索回密码


这种方法永远无法实现。

好的,你完全失败了。你有很多问题。让我们开始:

我正在尝试创建一个基本的WPF应用程序,它可以在SQL中存储加密的密码 当用户尝试登录但我得到一个 阅读本文后出现错误 加密/

失败,被解雇。请参阅,-之所以称为单向散列(不是加密),是因为它是单向的。无法在不破坏密码的情况下检索密码。这个计划永远不会奏效

还尝试在密码框中只键入一个字母,但仍然不起作用

阅读盐腌的工作原理文档。SHA将输入转换为特定长度的二进制随机数。不管你给它输入1个或1000个字符长的密码,结果都是一个固定长度的二进制代码

返回Convert.tobase64字符串(arrbyte)

这是非常不规则的。大多数人会将数组转换为十六进制(固定长度,易于调试读/写)并使用它

任何