Короче говоря, EntLib - это устаревшая библиотека, созданная более десяти лет назад. Не используйте это. Он никогда не предназначался для использования в .NET Core и, очевидно, никогда не обновлялся для работы с ним. Вместо этого используйте KeyDerivation.Pbkdf2 .
В этом конкретном случае вы не можете вообще использовать EntLib, потому что он пытается использовать несуществующее свойство, AppDomain.SetupInformation . Класс AppDomain был удален в первых версиях .NET Core и добавлен обратно в .NET Core 2.0. Даже сейчас он не предлагает всех участников, включая SetupInformation
.
Как объясняется на странице документации, это свойство будет добавлено обратно в .NET Core 3.0, которое должно быть выпущено в сентябре.
Решение real состоит в том, чтобы вообще не использовать такой код и использовать удостоверение ASP.NET Core для хранения паролей.
Хеширование пароля с помощью SHA1, как это, тривиально сломать за минуты, если не меньше. В прошлом, когда люди создавали радужные таблицы, предварительно рассчитывали хеш-значения SHA1 для всех комбинаций паролей и просто искали хеш-код, чтобы найти пароль. В настоящее время, вероятно, на 1020 * быстрее просто перебор, чем поиск по большой таблице хэшей.
ASP.NET всегда предоставлял гораздо более безопасное хеширование паролей и хранилище, которое включало в себя засолку и множественные итерации хеша. В ASP.NET Web Forms и более ранних версиях MVC использовались соли и как минимум 1000 итераций хеша.
ASP.NET Core Identity также предлагает безопасное хеширование и хранение. Использование это самый простой и безопасный вариант. Это открытый исходный код, поэтому, даже если вы не можете его использовать, легко проверить, как он хэширует пароли.
Метод HashPasswordV3 использует класс ASP.NET Core KeyDerivation для хеширования введенного пользователем пароля. Код очень прост. По сути, это вызов KeyDerivation.Pbkdf2 с 16-байтовой солью, которая возвращает 32-байтовый хеш-буфер.
byte[] salt = new byte[16];
rng.GetBytes(salt);
byte[] subkey = KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA256,
iterCount, 32);
Остальная часть кода упаковывает идентификатор алгоритма хеширования, байты хеша, количество итераций и соль в одном байтовом массиве для хранения в таблице. Эти атрибуты могут храниться в разных столбцах таблицы, но удобнее помещать все в один массив byte [].
Позже VerifyHashedPasswordV3 считывает сохраненный буфер, извлекает атрибуты и хеширует предоставленный пароль перед проверкой сохраненных и вычисленных хэшей