Как реализовать pbkdf2_sha256 в C#
Я сделал сайт, на котором при входе в систему я использую pbkdf2_sha256 для хэширования паролей. Я также использовал соль. Я хочу сделать простое программное обеспечение только для опыта, я хочу войти в программное обеспечение c#, используя те же учетные данные, что и сохраненные на веб-сайте. Я видел Rfc2898DeriveBytes, я думаю, что он принимает только 2 аргумента (пароль, соль в целочисленном виде). Но как насчет итераций, которые я указал на сайте?
Кто-нибудь, пожалуйста, научите меня, как сделать логин в приложении c# (WPF) и использовать pbkdf2_sha256 для создания хэша и проверки пароля.
Я видел PBKDF2.Net NuGet package и BouncyCastle NuGet Package, но я не понимаю, как их использовать, я получаю много ошибок в синтаксисе того, что когда-либо копировал с некоторых сайтов.
я также использовал
var salt = "FbSnXHPo12gb"; var password = "geheim"; var interactions = 12000; using (var hmac = new HMACSHA256()) { var df = new Pbkdf2(hmac, password, salt, interactions); Console.WriteLine(Convert.ToBase64String(df.GetBytes(32))); }
пожалуйста, помогите мне
Что я уже пробовал:
using System.Security.Cryptography; using System.Configuration; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Generators; using Org.BouncyCastle.Crypto.Modes; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; namespace login { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void test_Click(object sender, RoutedEventArgs e) { int iterations = 100000; // The number of times to encrypt the password - change this int saltByteSize = 64; // the salt size - change this int hashByteSize = 128; // the final hash - change this BouncyCastleHashing mainHashingLib = new BouncyCastleHashing(); var password = "password"; // That's really secure! :) byte[] saltBytes = mainHashingLib.CreateSalt(saltByteSize); string saltString = Convert.ToBase64String(saltBytes); string pwdHash = mainHashingLib.PBKDF2_SHA256_GetHash(password, saltString, iterations, hashByteSize); var isValid = mainHashingLib.ValidatePassword(password, saltBytes, iterations, hashByteSize, Convert.FromBase64String(pwdHash)); } } }