Сравнение защищенной строки из поля ввода с базой данных в c# - PullRequest
0 голосов
/ 28 мая 2020

XMAL

<PasswordBox PasswordChar="*" PasswordChanged="PasswordBox_PasswordChanged" Background="#545d6a" Foreground="White" FontSize="18"/>

Код за

private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
    {
        if (this.DataContext != null)
        { ((dynamic)this.DataContext).SecurePassword = ((PasswordBox)sender).SecurePassword; }
    }

У меня есть класс Klant со свойством Paswoord, которое я хочу сравнить с secureString.

ViewModel

public SecureString SecurePassword { private get; set; }

Klant = DataBaseOperations.OphalenKlantViaUsername(UserName);
            if (Klant != null)
            {
                if (Klant.Paswoord == SecurePassword.ToString())
                {
                    the password is correct and the program continues
                }
                else
                {
                    MessageBox.Show("the password is incorrect");
                }
            }
            else
            {
                User does not exist.
            }

Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 28 мая 2020

В настоящее время вы сравниваете равенство пароля со строкой представлением класса SecureString. SecureString.ToString не вернет защищенный пароль в виде строки. Вам нужно будет явно преобразовать его:

private bool IsPasswordValid(SecureString referencePassword, SecureString password)
{
  IntPtr valuePtr = IntPtr.Zero;
  try
  {
    valuePtr = Marshal.SecureStringToGlobalAllocUnicode(password);
    string plainTextPassword = Marshal.PtrToStringUni(valuePtr);

    valuePtr = Marshal.SecureStringToGlobalAllocUnicode(referencePassword);
    string plainTextReferencePassword = Marshal.PtrToStringUni(valuePtr);

    return plainTextReferencePassword.Equals(plainTextPassword, StringComparison.Ordinal);
  } 
  finally 
  {
    Marshal.ZeroFreeGlobalAllocUnicode(valuePtr);
  }
}

Использование

if (IsPasswordValid(Klant.Paswoord, this.SecurePassword)
{
  // Password is valid
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...