Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# 仅用于检索用户信息的基本登录页_C#_Asp.net - Fatal编程技术网

C# 仅用于检索用户信息的基本登录页

C# 仅用于检索用户信息的基本登录页,c#,asp.net,C#,Asp.net,我使用ASP.NET会员资格,因为这不是典型的网站有这种身份验证。我有一个表,管理员分配与Uname和密码加密 我有一个登录页面,当点击登录按钮时,我需要在我的DB表中搜索用户 public void getuserinfo() { String var = System.Configuration.ConfigurationManager .ConnectionStrings["KKSTechConnectionString"].ConnectionString;

我使用ASP.NET会员资格,因为这不是典型的网站有这种身份验证。我有一个表,管理员分配与Uname和密码加密

我有一个登录页面,当点击登录按钮时,我需要在我的DB表中搜索用户

public void getuserinfo()
{
    String var = System.Configuration.ConfigurationManager
        .ConnectionStrings["KKSTechConnectionString"].ConnectionString;

    SqlConnection conn = new SqlConnection(var);
    SqlCommand myCmd = new SqlCommand("SELECT Username, Pass FROM Users", conn);
    conn.Open();

    if(TextBox1== Username) && (TextBox2== Password) <- I am not able to get this right :( 
    {
        //How do I get his info?? 
    }
} 

*Database table for dbo.users:*

Uname(PK) | Pass | EmpID (FK)
我想先解密密码,然后将其与TextBoxPassword进行比较


请帮忙

在我们找到解决方案之前,有几个问题:

如何将用户名和密码从客户端发送到服务器端?是纯文本吗? 加密在哪里发生? 您是否编写了加密代码或使用了可用的标准之一? 在您的代码中,我可以注意到以下问题:

您已经创建了连接对象和命令对象,尽管您从未对数据库执行过查询。 您使用的查询返回整个用户表,这绝对不是必需的。您已经有用户名和密码的用户输入,因此只需查找它们是否正确。 将查询参数化并将输入发送到数据库。在那里,检查用户名和密码是否匹配。如果他们这样做了,请将您需要的用户详细信息发回应用程序中的某个地方,我想,或者抛出异常或返回null。
确保在匹配用户名和密码之前进行加密/解密。

另一种方法是对用户屏幕上输入的密码进行散列,并将其与数据库中存储的散列密码进行比较

现在,像这样使用你的函数

public void ValidateUser()
{
    var connectionString = System.Configuration.ConfigurationManager
        .ConnectionStrings["KKSTechConnectionString"].ConnectionString;
    var userName = txtUserName.Text;
    var hashedPassword = Helper.ComputeHash(txtPassword.Text, "SHA512", null);
    // this query should be parameterised when used in production to avoid SQL injection attacks
    var query = String.Format("SELECT Username, Pass FROM Users WHERE Username='{0}' AND Pass='{1}'",
                    userName,
                    hashedPassword);

    using(var connection = new SqlConnection( connectionString ))
    using(var command = new SqlCommand(query, connection ))
    {
        conn.Open();
        SqlDataReader reader=command.ExecuteReader();
        if(reader.Read())
        {

        }
        reader.Close();
    }
}

你可以解密,如果它还没有散列!!!!var是一个keyuword。请不要声明字符串var@Anonymous它是散列的。。我已经搞定了…@naveen好的。。采纳的建议。。但是我想要解决这个问题的方法。@Girish:-那就忘了检索吧……不行……我已经使用了前面提到的类来加密,以便将其存储到我的表dbo.Users中。。我只想让方法使用ADO.NET对值进行解密并与文本框字段进行比较..我创建了一个名为helper的类。。这就是我使用哈希的地方。。那么我在这里用什么来代替GetMd5Hash呢?@naveen。。这看起来不错。但是ifreader.Read{},我可以使用Switchquery来验证用户吗?我的意思是,根据表中的角色,我需要重定向用户。。