Asp.net Identity使用什么算法来加密密码?

时间:2014-07-15 05:14:39

标签: asp.net-mvc algorithm encryption asp.net-identity-2

Asp.Net Identity框架使用哪种算法来加密密码?我有一个Android,iPhone,Web和桌面使用相同数据库的场景。 此密码应加密,因此在ASP.NET MVC我使用了Identity框架来加密密码。现在我需要算法适用于所有平台。

任何帮助将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:16)

ASP.NET身份使用由Password-Based Key Derivation Function 2实现的Rfc2898DeriveBytes(PBKDF2)。它是一种散列算法。

请注意encryption and hashing are different

public static string HashPassword(string password)
{
    byte[] salt;
    byte[] bytes;
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
    using (Rfc2898DeriveBytes rfc2898DeriveByte = new Rfc2898DeriveBytes(password, 16, 1000))
    {
        salt = rfc2898DeriveByte.Salt;
        bytes = rfc2898DeriveByte.GetBytes(32);
    }
    byte[] numArray = new byte[49];
    Buffer.BlockCopy(salt, 0, numArray, 1, 16);
    Buffer.BlockCopy(bytes, 0, numArray, 17, 32);
    return Convert.ToBase64String(numArray);
}

答案 1 :(得分:0)

这取决于所选的兼容模式。

可以在他们的 Github repo

中找到实施细节

此时他们支持:

版本 2

  • 带有 HMAC-SHA1、128 位盐、256 位子密钥、1000 次迭代的 PBKDF2
  • 格式:{ 0x00, salt, subkey }

版本 3

  • 带有 HMAC-SHA256、128 位盐、256 位子密钥的 PBKDF2, 10000 次迭代。
  • 格式:{ 0x01, prf (UInt32), iter count (UInt32), salt length (UInt32), salt, subkey }(所有UInt32都以big-endian存储。)