【问题标题】:How to store Encrypted Password in cookies in C#?如何在 C# 中将加密密码存储在 cookie 中?
【发布时间】:2016-12-01 08:12:01
【问题描述】:

我想将用户名和密码存储在 cookie 中。 我使用 MD5 哈希技术加密了密码。 那么如何将加密的密码存储在 cookie 中呢?

【问题讨论】:

  • @KayNelson 我正在加密该密码。那么它是否安全??
  • @CallumLinington 为什么不
  • 有太多的理由来说明为什么你真的不应该这样做......
  • 记得也要设置

标签: c# asp.net cookies encryption


【解决方案1】:

不是这样的。您输入了一些参数,例如时间戳、用户代理、当前 ip、用户名等。但不是 密码。现在为您的令牌计算哈希并将其作为 cookie 发送。这就是身份验证令牌的制作方式。

为了在登录时对用户进行身份验证,请在您的服务器上计算哈希值并将其与数据库中的哈希值进行比较。永远不要在线发送您的散列密码。为了获得更好的标准,您应该对密码使用加盐哈希。请参阅this 了解盐。

此外,MD5 是散列而不是加密。两者之间有很多不同之处。另外,使用 SHA 而不是 MD5。详情请见this

【讨论】:

    【解决方案2】:

    您不应将用户名和密码存储在 cookie 中,因为它们会发送给客户端。即使它是散列的,特别是如果您要将 cookie 中收到的散列密码与数据库中的密码直接进行比较。这破坏了散列的目的。

    如果您想在请求之间保持用户的会话,您应该使用会话 ID。我不是 C# 专家,但通过快速谷歌我发现了这一点:

    HttpContext.Current.Session.SessionID
    

    这就是我将存储在 cookie 中的内容。

    【讨论】:

    • 但我正在将数据库密码中的哈希密码与哈希密码进行比较。
    • 这是个问题。散列的目的是,如果有人访问了散列密码,他们就无法对服务器进行身份验证,因为您的服务器应该再次运行散列函数,它不会与存储在数据库中的散列匹配。
    • 对不起,双重评论,我虽然按回车会插入一个空行而不是发送。好吧,我的意思是,如果您直接将接收到的数据与数据库哈希进行比较,如果有人可以访问哈希,他们将能够对服务器进行身份验证。散列的目的是在数据库中拥有客户端必须发送的不同数据。
    【解决方案3】:

    我不会向任何人推荐这个...

    而不是从用户那里获取密码。将它们保存在会话中以在用户连接期间使用,如果您希望用户使用相同的密码并稍后登录,您将必须有一个存储数据的数据库。

    所以将信息存储如下

    Session["username"] = txtusername.Text;
    

    然后在不同的页面或其他地方再次使用它

    string username = Session["username"].toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2016-12-25
      • 2011-07-15
      • 2011-01-07
      相关资源
      最近更新 更多