过go 在处理密码时,我总是在数据存储中分别存储salt和hash密码.今天我想更新一些遗留代码,使用RFC2898哈希值.我从System.Web.Helpers中找到了Crypto.Hash种方法.看起来这些能帮我完成大部分的重担.有GenerateSalt()HashPassword()VerifyHashedPassword()种方法.HashPassword()VerifyHashedPassword()方法不取盐值.HashPassword()方法的MSDN文件说明:

"生成的哈希字节流的格式为{0x00,salt,subkey},在返回之前采用base-64编码."

我需要担心盐吗?文档似乎说,salt将自动生成并存储在base-64编码值中?对吗?我只需要存储从HashPassword()返回的字符串?

推荐答案

Answer

所有密码都需要加密,以便安全地散列.然而,在这种情况下,你是正确的.系统网状物帮手.Crypto负责为您制作盐.You不需要创建一个.它存储在Crypto返回的字符串中.HashPassword().

Example

你需要做的就是这样.

using System.Web.Helpers;

public void SavePassword(string unhashedPassword)
{
    string hashedPassword = Crypto.HashPassword(unhashedPassword);
    //Save hashedPassword somewhere that you can retrieve it again.
    //Don't save unhashedPassword! Just let it go.
}

public bool CheckPassword(string unhashedPassword)
{
    string savedHashedPassword = //get hashedPassword from where you saved it

    return Crypto.VerifyHashedPassword(savedHashedPassword, unhashedPassword)
}

More Information

  • 如果您想查看Crypto类的源代码,可以查看here.
  • here是一个很好的关于这门课和它背后的一些 idea 的博客.

Asp.net相关问答推荐

JWT 和 Google 在 Razor 页面中进行身份验证和授权

如何在 ASP.NET RadioButtonList 中的项目之间添加空格

在 ASP.Net 中使用 Page_Load 和 Page_PreRender

更新到 ASP.NET Core 2.0 - 包与 netcoreapp2.0 不兼容

ASP.NET 平台是否有与 Heroku 等价的工具?

如何判断一个IP地址是否是私有的?

没有身份的 ASP.NET Core 2.0 承载身份验证

使用 JavaScript 更改 ASP.NET 标签的可见性

在属性中实现逻辑是一种好习惯吗

Web Api 请求内容在操作过滤器中为空

没有回发的按钮?

显示单选按钮列表内联

在 ASP.NET 中将虚拟路径转换为实际 Web 路径

解析器错误:无法创建类型

在 Visual Studio 2010 Professional 中找不到请求的 .Net Framework 数据提供程序

OWIN 和 Katana,为什么要将应用程序与服务器解耦?

删除 HTML 或 ASPX 扩展

如何获取程序集的最后修改日期?

Asp.Net web 服务:我想返回错误 403 禁止

ASP.NET 应用程序状态与静态对象