C# 如何在登录时读取哈希密码?

C# 如何在登录时读取哈希密码?,c#,asp.net,webforms,C#,Asp.net,Webforms,我用过这个 散列在注册时创建的密码,但当我尝试登录时,它不允许我 如何将其作为提交并转换为哈希之前已形成的普通文本读取 @编辑 虽然我可以在使用整个哈希文本时使用哈希密码登录..但这不是我想要的D: @编辑2 这就是登录的样子 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Connect"].ToString())) { SqlComma

我用过这个

散列在注册时创建的密码,但当我尝试登录时,它不允许我

如何将其作为提交并转换为哈希之前已形成的普通文本读取

@编辑

虽然我可以在使用整个哈希文本时使用哈希密码登录..但这不是我想要的D:

@编辑2

这就是登录的样子

  using (SqlConnection con = new    SqlConnection(ConfigurationManager.ConnectionStrings["Connect"].ToString()))
    {
        SqlCommand cmd = new SqlCommand();

        cmd.Connection = con;

        cmd.CommandText = @"SELECT * FROM users
                            WHERE login = @username
                            AND pass = @password";

        cmd.Parameters.AddWithValue("@username", TextBox_Login.Text);
        cmd.Parameters.AddWithValue("@password", TextBox_Password.Text);

        con.Open();
       }

散列的想法是它很容易加密,也很难解密。登录的方法是通过相同的哈希算法运行尝试的密码,然后将该哈希与用户存储的哈希进行比较。您永远不能将存储的散列作为纯文本读取。

散列的概念是,它非常容易加密,也很难解密。登录的方法是通过相同的哈希算法运行尝试的密码,然后将该哈希与用户存储的哈希进行比较。您永远不能将存储的哈希作为纯文本读取。

哈希是一种方法。您无法将其转换回您开始使用的文本(当然,一般来说)

听起来,当您登录时,您缺少一个步骤来散列输入登录的文本并与存储的散列进行比较。您提到在登录表单中使用哈希文本是可行的,但是如果您只是简单地对登录密码文本进行哈希,并将其用于身份验证/比较,您将得到预期的结果


如果您散列
TextBox\u Password.Text
,然后将其作为参数传递,而不是直接传递文本,您应该会得到您想要的结果。尽管您最终会想做一些研究并在哈希表上实现salt。

哈希是一种方法。您无法将其转换回您开始使用的文本(当然,一般来说)

听起来,当您登录时,您缺少一个步骤来散列输入登录的文本并与存储的散列进行比较。您提到在登录表单中使用哈希文本是可行的,但是如果您只是简单地对登录密码文本进行哈希,并将其用于身份验证/比较,您将得到预期的结果


如果您散列
TextBox\u Password.Text
,然后将其作为参数传递,而不是直接传递文本,您应该会得到您想要的结果。尽管您最终会希望做一些研究并在哈希上实现salt。

密码是普通保存还是哈希保存在数据库上?@CihanYakar这是一个示例,其中一个密码在哈希D561AAD4326B6A3C50143908E22A2252336CB9B1之后的样子,并在表中设置为varchan。但是假设散列的passowrd是“potato”,当我尝试登录时,我不能使用potato,但我必须使用散列来登录xD@Harugawa-看看我的答案。为了与存储的密码进行比较,您将使用“土豆”并在登录时对其进行散列。密码是普通保存还是散列保存在数据库中?@CihanYakar这是对D561AAD4326B6A3C50143908E22A2252336CB9B1进行散列后其中一个密码的外观示例,并在表中设置为varchan。但是假设散列的passowrd是“potato”,当我尝试登录时,我不能使用potato,但我必须使用散列来登录xD@Harugawa-看看我的答案。为了与存储的密码进行比较,您将使用“土豆”并在登录时将其散列。在创建会话和密码的部分旁边添加了我正在使用的登录代码stuff@Harugawa-您需要传递哈希版本的
TextBox\u Password.Text
。这样,您将传递一个哈希值,该哈希值等于存储在数据库中的值。我明白了,我成功地做到了。那么,散列是一种全球性的东西?因为现在我设法用土豆登录;o通过向登录页面添加哈希,这将取决于您对“全局”的定义。在散列之后,基本上你必须将所有你计划与该散列进行比较的文本进行散列。永远不要试图取回原始文本,这会破坏散列所提供的安全性。很高兴你让它工作了!:)@CihanYakar提出了一个很好的观点。由于散列是不可逆的,如果黑客无法反转散列并获取密码,则会使您的站点更加安全。当然,您最终会希望对哈希进行更多的处理,例如使用salt(这本身就是一个完全不同的主题),这会导致即使是相同的密码也会以非常不同的方式进行哈希。因此,如果黑客要计算出“土豆”的哈希值,另一个拥有该密码的用户将拥有不同的哈希值。这是一个非常有趣的话题。在我创建会话和stuff@Harugawa-您需要传递哈希版本的
TextBox\u Password.Text
。这样,您将传递一个哈希值,该哈希值等于存储在数据库中的值。我明白了,我成功地做到了。那么,散列是一种全球性的东西?因为现在我设法用土豆登录;o通过向登录页面添加哈希,这将取决于您对“全局”的定义。在散列之后,基本上你必须将所有你计划与该散列进行比较的文本进行散列。永远不要试图取回原始文本,这会破坏散列所提供的安全性。很高兴你让它工作了!:)@CihanYakar提出了一个很好的观点。由于散列是不可逆的,如果黑客无法反转散列并获取密码,则会使您的站点更加安全。当然,您最终会希望对哈希进行更多的处理,例如使用salt(这本身就是一个完全不同的主题),这会导致即使是相同的密码也会以非常不同的方式进行哈希。因此,如果黑客要计算出“土豆”的哈希值,另一个拥有该密码的用户将拥有不同的哈希值。这是一个很有趣的话题。