2

我对 Asp.net mvc 完全陌生。我正在尝试在我的 Asp.net mvc 应用程序上实现基于令牌的身份验证。我已经根据http://www.primaryobjects.com/2015/05/08/token-based-authentication-for-web-service-apis-in-c-mvc-net/成功实现了 客户端生成的令牌在哪里随每个 http 请求一起发送。在服务器端,我处理这个令牌并获取其中的数据以在服务器端生成一个令牌以进行比较。我的令牌包含数据用户名、密码、ip、用户代理和时间戳。在服务器端,我从客户端令牌获取用户名并从数据库中检索密码以在服务器中生成令牌。现在的问题是我的应用程序已更改为使用在数据库中存储加密密码BCrypt.Net.BCrypt.HashPassword. 现在的问题是使用这个 BCrypt api 我无法解密哈希密码来获取原始密码。所以我不知道如何在服务器端生成令牌。对此的任何想法都受到高度评价

4

1 回答 1

0

这是哈希的本质。您可以散列文本字符串(密码),但不能反转它并获取原始输入。这是因为多个文本字符串被散列到同一个散列。所以没有办法通过查看哈希来说明原始输入是什么。

要验证用户是否输入了正确的密码,您可以使用BCrypt.Verify("my password", passwordHash)

如果您的新密码与哈希匹配,则返回 true。请注意,您不能再次对密码进行哈希处理,只需检查两个哈希值是否相等,因为对于相同的字符串,每次都会得到不同的哈希值,因为它会向原始字符串添加随机盐值。因此,您必须使用BCrypt.Verify来检查密码。如果您想稍后检索它,您可以为令牌选择不同的架构或加密密码并存储在数据库中。但通常密码在存储在数据库中时会进行哈希处理,以提高安全性。

于 2020-04-08T03:57:54.393 回答