Используйте значение passwordbox как для переменной - PullRequest
2 голосов
/ 16 марта 2012

У меня есть поле для ввода пароля, и я хочу получить входные данные для проверки на подтверждение.

Мой код для ввода пароля c # код

  public void textBox2_TextInput(object sender, TextCompositionEventArgs e)
    {
        //pass = textBox2.ToString();
    }

и код xaml

<PasswordBox Name="textBox2" 
             PasswordChar="*"  
             TextInput="textBox2_TextInput" />

это то, что я написал для захвата пароля

  private void loginbutton_Click(object sender, RoutedEventArgs e)
   {
       usr = textBox1.Text;
       SecureString passdat =textBox2.SecurePassword;
       pass = passdat.ToString();
   }             

возвращает ноль. Это фиктивная демонстрация, поэтому шифрование не требуется. Я ранее использовал текстовое поле и проверка работала.ящик для пароля просто сложные вещи.

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Обратите внимание, что SecureString не имеет членов, которые проверяют, сравнивают или преобразовывают значение SecureString.Отсутствие таких членов помогает защитить ценность экземпляра от случайного или злонамеренного воздействия.Используйте соответствующие члены класса System.Runtime.InteropServices.Marshal, например, метод SecureStringToBSTR, чтобы манипулировать значением объекта SecureString.

        private void loginbutton_Click(object sender, RoutedEventArgs e)
        {
            usr = textBox1.Text;
            txtPassword=textBox2.Text;

            SecureString objSecureString=new SecureString();
            char[] passwordChar = txtPassword.ToCharArray();
            foreach (char c in passwordChar)
                    objSecureString.AppendChar(c);
            objSecureString.MakeReadOnly();//Notice at the end that the MakeReadOnly command prevents the SecureString to be edited any further.


            //Reading a SecureString is more complicated. There is no simple ToString method, which is also intended to keep the data secure. To read the data C# developers must access the data in memory directly. Luckily the .NET Framework makes it fairly simple:
            IntPtr stringPointer = Marshal.SecureStringToBSTR(objSecureString);
            string normalString = Marshal.PtrToStringBSTR(stringPointer);//Original Password text

        }
2 голосов
/ 16 марта 2012

Класс SecureString не позволяет увидеть значение;в этом весь смысл.Если вы хотите работать со значением, введенным в PasswordBox, используйте член PasswordBox вместо элемента SecurePassword:

private void loginbutton_Click(object sender, RoutedEventArgs e)
{
    usr = textBox1.Text;
    String pass = textBox2.Password;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...