Asp.net 身份密码哈希

2023-11-24

新的 ASP.net Identity 项目为网站安全带来了一些有用的代码和接口。要使用接口(而不是使用 MVC 5 模板中包含的标准实体框架实现)实现自定义系统,IPasswordHasher是必须的。

IPasswordHasherASP.net Identity 中的接口

namespace Microsoft.AspNet.Identity
{
    public interface IPasswordHasher
    {
         string HashPassword(string password);
         PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword);
    }
}

是否可以在 ASP.net Identity 中并通过此接口使用密码加盐来实现更安全的加密?


健康警告对于以下答案:了解您正在使用哪个版本的 ASP.Net Identity。如果源代码是 github 存储库中的较新版本之一,您应该直接引用源代码。

当我写这篇文章时,当前版本(3.0.0-rc1/.../PasswordHasher.cs)的密码处理程序与下面的答案有很大不同。这个较新的版本支持多个哈希算法版本,并记录为(并且在您阅读本文时可能会进一步更改):

版本2:

  • 具有 HMAC-SHA1 的 PBKDF2、128 位盐、256 位子密钥、1000 次迭代。
  • (另请参阅:SDL 加密指南 v5.1,第 III 部分)
  • Format: { 0x00, salt, subkey }

版本 3:

  • 具有 HMAC-SHA256 的 PBKDF2、128 位盐、256 位子密钥、10000 次迭代。
  • Format: { 0x01, prf (UInt32), iter count (UInt32), salt length (UInt32), salt, subkey }
  • (所有 UInt32 均以大端存储。)

原答案仍然有效对于 ASP.Net Identity 的原始版本,如下:


@jd4u 是正确的,但为了提供更多信息,这不适合他的答案的评论:

  • Microsoft.AspNet.Identity.PasswordHasher : IPasswordHasher already salts for you,
    • 更重要的是它使用Rfc2898DeriveBytes生成盐和哈希值,
    • 它使用行业标准 PBKDF2 (SE讨论在这里, OWASP 此处推荐 PBKDF2).
  • 默认Microsoft.AspNet.Identity.UserManager<TUser>实施用途Microsoft.AspNet.Identity.PasswordHasher作为混凝土IPasswordHasher
  • PasswordHasher反过来是一个非常简单的包装器(最终)System.Security.Cryptography.Rfc2898DeriveBytes

所以,如果你要使用Rfc2898DeriveBytes,只需使用PasswordHasher- 所有繁重的工作都已经为您完成(希望是正确的)。

Details

PasswordHasher(当前)最终使用的完整代码的作用非常接近:

int saltSize = 16;
int bytesRequired = 32;
byte[] array = new byte[1 + saltSize + bytesRequired];
int iterations = SOME; // 1000, afaik, which is the min recommended for Rfc2898DeriveBytes
using (var pbkdf2 = new Rfc2898DeriveBytes(password, saltSize, iterations))
{
    byte[] salt = pbkdf2.Salt;        
    Buffer.BlockCopy(salt, 0, array, 1, saltSize);
    byte[] bytes = pbkdf2.GetBytes(bytesRequired);
    Buffer.BlockCopy(bytes, 0, array, saltSize+1, bytesRequired);
}
return Convert.ToBase64String(array);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.net 身份密码哈希 的相关文章

  • 如何处理 ASP.NET 中未处理的线程异常?

    ASP NET 应用程序应该如何处理非请求后台线程上发生的未处理的异常 由于错误 默认情况下 此类异常会导致进程终止 这在 ASP NET 工作进程的设置中是不可接受的因为并发运行的请求会不可预测地中止 这也是一个性能问题 请求线程上的异常
  • 将 MasterPage ImageButton 事件传递给内容页面

    我在 MasterPage 中有 ImageButton 我希望触发 OnClick 事件并由 MasterPage 内托管的 ASPX 页面捕获 母版页
  • 如何使用带有 Scripts.Render 的 ASP MVC 4 捆绑包的脚本延迟属性

    我浏览了 Google 和 Stackoverflow 但没有找到答案 是否有任何内置方法可以使捆绑包按延迟执行 或者有人知道有人为此编写的扩展帮助器方法吗 尝试将 Web Optimization 升级到版本 1 1 0Codeplex
  • 让 PHPmailer 成为 Gmail 的“更安全的应用程序”

    我们可以在 PHPmailer 中实施哪些安全措施 使其成为更安全的 Gmail 应用程序 https support google com accounts answer 6010255 https support google com
  • ASP.NET MVC HttpException 消息未显示在客户端上

    我正在使用 asp net mvc 构建 RESTful Web api 它返回纯 json 数据 在我的客户端上 我使用backbone js 与其进行通信 我的问题是 如何在 JavaScript 中捕获消息 例如 如果用户没有删除权限
  • 在 SelectList 集合中设置所选项目

    我有一堂具有以下属性的课程 它构建了一个SelectList现有列表中的对象 然后设置所选项目 public SelectList ProviderTypeList get SelectList list new SelectList my
  • Html.BeginForm() 扩展类型

    有谁知道创建自定义 HtmlHelperextension 方法的语法 其行为类似于 p Loads of html stuff here p 我正在思考一些类似的事情 有任何想法吗 Cheers ETF 传真 您需要创建一个实现的类IDi
  • 什么是 IIS 应用程序池?

    应用程序池到底是什么 它的目的是什么 应用程序池允许您将应用程序彼此隔离 即使它们运行在同一台服务器上 这样 如果一个应用程序出现错误 就不会影响其他应用程序 此外 应用程序池允许您分隔需要不同安全级别的不同应用程序 这是一个很好的资源 I
  • 有什么方法可以在 ASP.NET MVC Web 应用程序中模拟声明主体吗?

    我有一些ASP NET MVC控制器代码检查用户是否经过身份验证 如果是 则检查用户是否具有特定声明 工作正常 我有一些单元测试 我需要模拟一个IPrincipal 这很容易做到 但我不知道如何检查索赔 我通常会做类似的事情 public
  • 避免从浏览器控制台修改 Javascript 变量

    我有个问题 我定义了一些全局变量并将其命名为一个名为 app 的对象 例子 window app foo null bar null 好吧 我的想法是 我希望能够通过调用 app foo baz 或 app bar baz 从任何模块修改这
  • 将 ASP.NET 验证与 JQuery 结合起来的优雅方式

    如何最好地将 JQuery 与 ASP NET 客户端验证模型结合起来 我通常会避免实现 ASP NET 验证模型 因为它对于我正在做的事情来说总是显得大材小用 对于我现在正在开发的网站 我只是收集非关键用户数据 并且只需要一些基本的验证
  • 为什么我应该使用 $_GET 和 $_POST 而不是 $_REQUEST? [复制]

    这个问题在这里已经有答案了 除此之外 REQUEST从 cookie 读取 有什么理由我应该使用 GET and POST代替 REQUEST 这样做的理论和实践理由是什么 当我只想让用户的某些数据返回某些数据时 我使用 REQUEST 当
  • 是否应该用于 JSF 2.2 CSRF 保护?

    我很困惑 我看到 JSF 2 0 有隐式 CSRF 保护 JSF 2 0 如何防止 CSRF https stackoverflow com questions 8704612 how jsf 2 0 prevents csrf 根据文章的
  • 在 Web 表单项目中禁用自动友好 URL

    我在 Visual Studio 2013 中创建了一个 C Web 表单项目 当我运行我的sample aspx页面 页面自动使用 sample友好的 URL 路由 我想自己手动处理路由 而不是让 NET 自动完成 如何禁用友好 URL
  • 验证插件在更新面板中不起作用

    我有一个更新面板 面板内有文本框和按钮可用 现在我正在使用 jQuery Validation 插件 但是在更新面板中使用时验证插件不起作用 例如 function GetAddressTargetList var objArray new
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 如何从代码隐藏文件中的asp.net用户控件注册(调用)jQuery函数?

    如何从代码隐藏文件中的asp net用户控件注册 调用 jQuery函数 您可以使用ClientScriptManager RegisterStartupScript http msdn microsoft com en us librar
  • 加密和解密图像.net

    谁能给我一个使用 net 和 asp net 加密和解密图像的示例 当我将图像作为二进制数据保存到 SQL Server 中时 我希望对图像进行加密 包含这些名称空间 using System IO using System Securit
  • 无需安装即可部署 Expression Encoder SDK

    我试图在使用 Microsoft Expression Encoder 3 SDK 时证明一个概念 我正在尝试将 SDK 部署到我的托管 Web 服务器 以了解更多关于它是否有效以及还需要安装什么的信息 我无法在服务器上进行任何操作 以下是
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐