Member 13389606 Ответов: 2

Как реализовать 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));
        }
    }
}

2 Ответов

Рейтинг:
2

Graeme_Grant

Боги поиска Google - ваши друзья... Этот поиск: После установки BouncyCastle документации стандарт PBKDF2 с#[^] нашел это общепринятое решение: Как создать хэш пароля PBKDF2-SHA256 в C# / Bouncy Castle-Stack Overflow[^]


Рейтинг:
1

Roberta Mafessoni

Пожалуйста, взгляните на эти ссылки, они являются хорошими альтернативами, я думаю, и поэтому информативны, вторая-это прямая ссылка на библиотеку классов, которую я использовал для реализации .


https://crackstation.net/hashing-security.htm


https://github.com/defuse/password-hashing/blob/master/PasswordStorage.cs