У меня есть ASP.NET Web Api, который использует ASP.NET Identity v2.2.1 для управления пользователями. Я могу добавлять/редактировать пользователей без проблем. Однако у меня есть второй проект, который не может использовать API, но должен иметь возможность изменять пароль Users
напрямую через базу данных.Пароль для хэширования вручную аналогичен паролю ASP.NET v2.2.1
Я пытаюсь выяснить, как ввести пароль, введенный пользователем, не пройдя через API. Мне нужно убедиться, что я использую тот же алгоритм хэширования, который использует ASP.NET Identity. Я натолкнулся на некоторый код в this SO article, но я не уверен, что это тот же алгоритм хэширования, который используется v2.2.1.
using using System.Security.Cryptography;
public static string HashPassword(string password)
{
private const int PBKDF2IterCount = 1000; // default for Rfc2898DeriveBytes
private const int PBKDF2SubkeyLength = 256/8; // 256 bits
private const int SaltSize = 128/8; // 128 bits
if (password == null)
{
throw new ArgumentNullException("password");
}
// Produce a version 0 (see comment above) text hash.
byte[] salt;
byte[] subkey;
using (var deriveBytes = new Rfc2898DeriveBytes(password, SaltSize, PBKDF2IterCount))
{
salt = deriveBytes.Salt;
subkey = deriveBytes.GetBytes(PBKDF2SubkeyLength);
}
var outputBytes = new byte[1 + SaltSize + PBKDF2SubkeyLength];
Buffer.BlockCopy(salt, 0, outputBytes, 1, SaltSize);
Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SaltSize, PBKDF2SubkeyLength);
return Convert.ToBase64String(outputBytes);
}
Я хотел бы избежать того, чтобы добавить ASP.NET Идентичность как зависимость этого проекта, следовательно, почему я хотел бы hash
пароль вручную.
Вы все еще ищете решение? – trailmax