System.Web.Helpers.Crypto - 盐在哪里?

Mar*_*ark 28 c# asp.net cryptography

在过去处理密码时,我总是在我的数据存储中分别存储盐和散列密码.今天我想更新一些遗留代码以使用RFC 2898哈希值.我偶然发现了这些Crypto.Hash方法System.Web.Helpers.看起来这些将为我完成大部分繁重的工作.还有GenerateSalt(),HashPassword()VerifyHashedPassword()方法.该HashPassword()VerifyHashedPassword()方法不拿盐值.HashPassword()方法的MSDN文档说:

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

我需要担心盐吗?文档似乎说会自动生成一个salt并存储在base-64编码值中?它是否正确?我需要存储的是从中返回的字符串HashPassword()

Mar*_*ker 52

回答

所有密码都需要加密,以便安全地散列它们.但是,在这种情况下,你是对的.System.Web.Helpers.Crypto负责为您创建一个salt.不需要创建一个.它存储在Crypto.HashPassword()返回的字符串中.

你需要做的就是这样.

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)
}
Run Code Online (Sandbox Code Playgroud)

更多信息

  • 如果您想查看Crypto类的源代码,可以在此处查看.
  • 这里是在类和它的一些背后的想法的好博客.

  • @LeandroDeMelloFagundes salt和Hashed密码都存储在`Crypto.HashPassword`返回的单个字符串中 (5认同)