使用JavaScript使用随机盐散列密码并从C验证#

使用JavaScript使用随机盐散列密码并从C验证#,javascript,c#,hash,Javascript,C#,Hash,我想使asp.net web应用程序的密码维护过程强大。请验证我的想法是否可行。如果是,请建议示例代码或要实现的链接。否则,建议如何将密码从浏览器安全地发送到服务器并存储在哈希中 注意:为了安全起见,我已经在使用TLS(SSL) 步骤: 注册用户时,使用来自的随机salt散列用户密码 客户端浏览器中的JavaScript 提交表格 服务器端代码将散列存储在数据库中 当用户尝试登录时,在客户端浏览器中用JavaScript中的随机盐散列用户密码 提交表格 使用登录密码验证数据库存储的哈希 搞砸(我

我想使asp.net web应用程序的密码维护过程强大。请验证我的想法是否可行。如果是,请建议示例代码或要实现的链接。否则,建议如何将密码从浏览器安全地发送到服务器并存储在哈希中

注意:为了安全起见,我已经在使用TLS(SSL)

步骤:

  • 注册用户时,使用来自的随机salt散列用户密码 客户端浏览器中的JavaScript
  • 提交表格
  • 服务器端代码将散列存储在数据库中
  • 当用户尝试登录时,在客户端浏览器中用JavaScript中的随机盐散列用户密码
  • 提交表格
  • 使用登录密码验证数据库存储的哈希 搞砸(我想这两种散列会因为随机盐而有所不同 但验证功能将能够对其进行比较)

  • 这是不安全的。哈希和盐析应该是服务器提供的隐藏实现秘密,而不是客户端提供的。由于客户机拥有实现秘密,因此如果有人访问了您的数据库,他们可以对您的安全模型进行反向工程


    HTTPS将在传输过程中保护密码。我还避免使用您自己的身份验证系统,因为存在许多“陷阱”。ASP.NET Framework和Core都为身份验证提供了强大的模式和实现。

    安全性很难实现,所以除非您完全知道自己在做什么,否则不要搞砸它,即使这样,您也不应该实现自己的解决方案。只要坚持使用行之有效的技术->那么基本上您是在服务器上存储预哈希值?那么它基本上与存储纯文本值相同?最终它是不安全的,因为JS所做的一切都可以在开发工具中被用户看到。不要再发明像用户身份验证这样容易出错的东西。哈希值和密码之间没有区别。我们依靠TLS防止事物被窥探,并接受这是安全的。如果您对这类事情不太熟悉,请使用现成的产品,如aspnet identity。除非你是这一领域的专家,否则多年的研究和最佳实践是无法击败的。为什么要把时间浪费在一个已解决的问题上?AFAIK哈希是不可逆的,那么这是如何逆转的呢?@AjayNikam使用彩虹表。您不需要反转密码,只需找到matchesSubmitting登录(用户ID、密码)表单,而无需加密或哈希,它是否易受攻击?@AjayNikam anything是“易受攻击的”。但是如果你正确使用https,它应该会减少中间人攻击的机会。我不明白,许多JavaScript加密库的作用是什么?在安全性方面是否增加了重要价值?