【发布时间】:2017-10-28 18:01:57
【问题描述】:
我正在开发一个 .net web api 项目,需要将用户名和密码存储在用户表中。
如果用户名和密码字段在用户表中随机散列并且盐存储在用户的同一行中,我将如何验证用户?我错过了什么吗?好像没办法找到用户做密码比对。
【问题讨论】:
-
通常,用户名可以以纯文本形式存储。只有密码需要加盐/散列。
标签: c# encryption hash
我正在开发一个 .net web api 项目,需要将用户名和密码存储在用户表中。
如果用户名和密码字段在用户表中随机散列并且盐存储在用户的同一行中,我将如何验证用户?我错过了什么吗?好像没办法找到用户做密码比对。
【问题讨论】:
标签: c# encryption hash
它们本身不是随机散列的。它们针对相同的密钥进行哈希处理。因此,要进行身份验证,您需要对输入的凭据重复哈希过程,并将该哈希与用户存储的哈希进行比较。
另一个选项是使用内置的Membership 提供程序为您处理身份验证。
您对两者进行散列的实际要求实际上是一个非常难以解决的要求。正如您所确定的,您将无法识别该用户。因此,您将不得不求助于使用一些排序数据,例如 IP、用户代理字符串等来做出最佳猜测。但是,这将是非常危险的。
归根结底,用户名用于识别用户是谁,而不是验证该用户。如果您有从不显示用户名或以其他方式保护用户名的安全要求,请显示他们使用他们的名字或其他标识符登录,以免用户名暴露。归根结底,您必须找到用户记录并对用户名进行哈希处理只会使这变得更加困难,并且不会为您提供任何真正的安全优势。
可以在here找到其他有价值的安全阅读
【讨论】: