Простая аутентификация WPF - PullRequest
1 голос
/ 15 июня 2011

Как создать простую аутентификацию WPF для приложения WPF?Например: в первый раз пользователь должен зарегистрироваться, а затем войти в систему.Логин и пароль пользователя должны быть сохранены в виде текстового файла (в зашифрованном виде).Если процесс аутентификации успешен, он должен перенаправить в другое существующее окно.

Я новичок в WPF.Я искал об этом вопросе, но не нашел то, что мне нужно.Мне нужно простое, пошаговое объяснение, как это сделать.

Заранее спасибо!:)

1 Ответ

19 голосов
/ 15 июня 2011

Я также учусь, поэтому, чтобы немного потренироваться, я создал очень простой пример для вас.Это, вероятно, непрофессионально и небезопасно, но я думаю (надеюсь), что это можно как-то расширить:).

Во-первых, вам нужно создать простые окна WPF (используйте txt / btn + соглашение об именах имен):

windows

Для обоих окон добавьте

using System.IO;

Затем вам нужно добавить события для кнопок и изменить код для обоих окон:

public partial class LoginWindow : Window
{
    public LoginWindow()
    {
        InitializeComponent();
    }
    // This is really bad/weak encryption method
    String WeakDecryptMethod(String textIn)
    {
        Char[] temp = textIn.ToArray<Char>();
        for (int i = 0; i < textIn.Length; i++)
        {
            temp[i] = (char)((int)temp[i] - 3);
        }
        return new String(temp);
    }
    private void btnRegister_Click(object sender, RoutedEventArgs e)
    {
        RegisterWindow newWindow = new RegisterWindow();
        newWindow.ShowDialog();
    }
    private void btnOK_Click(object sender, RoutedEventArgs e)
    {
        // If file exist and login and password are "correct"
        if (File.Exists("Users.txt") 
            && txtLogin.Text.Length >= 4 
            && txtPass.Text.Length >= 4)
        {
            using (StreamReader streamReader = new StreamReader("Users.txt"))
            {
                // While there is something in streamReader read it
                while (streamReader.Peek() >= 0)
                {
                    String decryptedLogin = WeakDecryptMethod(streamReader.ReadLine());
                    String decryptedPass = WeakDecryptMethod(streamReader.ReadLine());
                    if (decryptedLogin == txtLogin.Text && decryptedPass == txtPass.Text)
                    {
                        ProtectedWindow protectedWindow = new ProtectedWindow();
                        this.Close();
                        protectedWindow.Show();
                        break;
                    }
                }
            }
        }
    }
    private void btnCancel_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
}

Икод для окна регистрации:

public partial class RegisterWindow : Window
{
    public RegisterWindow()
    {
        InitializeComponent();
    }
    // This is really bad/weak method to encrypt files
    String WeakEncryptMethod(String textIn)
    {
        Char[] temp = textIn.ToArray<Char>();

        for (int i = 0; i < textIn.Length; i++)
        {
            temp[i] = (char)((int)temp[i] + 3);
        }
        return new String(temp);
    }
    private void btnRegister_Click(object sender, RoutedEventArgs e)
    {
        // If file exist and login and password are "correct"
        if (File.Exists("Users.txt") 
            && txtLogin.Text.Length >= 4 
            && txtPass.Text.Length >= 4 
            && txtPass.Text == txtPassCheck.Text)
        {
            StringBuilder stringBuilder = new StringBuilder();
            using (StreamReader streamReader = new StreamReader("Users.txt"))
            {
                stringBuilder.Append(streamReader.ReadToEnd());
            }
            using (StreamWriter streamWriter = new StreamWriter("Users.txt"))
            {
                streamWriter.Write(stringBuilder.ToString());
                streamWriter.WriteLine(WeakEncryptMethod(txtLogin.Text));
                streamWriter.WriteLine(WeakEncryptMethod(txtPass.Text));
            }
            this.Close();
        }
    }
    private void btnCancel_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
}

Для работы приложения необходим доступ к файлу «Users.txt», который необходимо поместить в одну папку.

Примечания:

  1. Будет лучше, если вы будете использовать некоторые надлежащие функции шифрования и, возможно, создадите для него отдельный класс.Кроме того, я почти уверен, что он не будет работать должным образом с логином и паролем, который содержит последние 3 символа из конца таблиц ASCII.
  2. На мой взгляд, это плохая идея хранить данные логина и пароля в *.txt file:).
  3. Насколько я знаю, код C # очень легко реверсировать, поэтому, вероятно, будет лучше как-то скрыть часть шифрования / дешифрования.Я не знаю много об этом, но вы сможете прочитать больше здесь , и, вероятно, дядя Google сможет помочь.
  4. Код очень прост и, вероятно, многовозможности для его расширения (дополнительная обработка файлов, проверка TextBox для правильного ввода и надежный расчет пароля)
  5. Было бы неплохо, если бы кто-то более профессиональный проверил мой код, пожалуйста, не стесняйтесь голосовать вниз; P (с конструктивной критикойоставил в комментариях конечно :)).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...