我目前正在编写 ac# mvc Web 应用程序,其中从用户那里获取密码并存储在数据库 - sql server 中。我需要一种散列密码的方法。
建议使用数据保护 API (DPAPI)。我不熟悉它,从互联网上的研究来看,关于它的信息很少。
任何人都可以指出方向以获取更多信息吗?或者给我一个关于如何设置和使用它等的概述。
我目前正在编写 ac# mvc Web 应用程序,其中从用户那里获取密码并存储在数据库 - sql server 中。我需要一种散列密码的方法。
建议使用数据保护 API (DPAPI)。我不熟悉它,从互联网上的研究来看,关于它的信息很少。
任何人都可以指出方向以获取更多信息吗?或者给我一个关于如何设置和使用它等的概述。
数据保护 API 主要用于保护用户凭据下的加密密钥和机密。如果您想将散列密码存储在数据库中,那么 DAPI 并不是您真正想要的。
ASP.NET Membership Provider用于管理用户,包括使用盐散列密码。不幸的是,似乎没有一种方法可以只返回散列密码,所以如果您不需要额外的功能,可能值得从CodeFirst Membership Provider之类的东西中提取相关代码(参见源代码中的 Crypto.cs代码)。这里的优势是这个 Membership Provider 使用 PBKDF2 来派生哈希,考虑到轮数,它更能抵抗暴力攻击。这也是StackOverflow本身使用的方法。
.Net 有一个名为ProtectedData的 DPAPI 包装类。它非常易于使用,并且只包含两个静态方法:Protect
和Unprotect
. 可以在此处找到操作方法文章. DPAPI 不需要密钥,因为它使用登录用户的凭据或计算机的凭据进行加密,具体取决于您在调用 Protect 时选择的范围。请注意,如果您打算将加密数据存储在数据库中,则必须确保始终使用相同的 Windows 用户帐户或机器(同样,取决于加密范围),否则您将无法解密数据。因此,根据您的应用程序,此 API 可能不是最佳的。它主要用于在单台机器上进行本地加密,而不是分布式应用程序。