Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование securestring 
:(
    Опции темы
nmn
Дата 5.3.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: 1
Всего: 1



а каким образом можно загрузить значение в SecureString минуя использование string?
PM Skype   Вверх
Мурлыкатам_
Дата 31.3.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



А каким образом можно загрузить значение в SecureString используя string?  smile 


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
Rififi
Дата 31.3.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



nmn, 
любым из доступных методов инициализации
PM MAIL   Вверх
Мурлыкатам_
Дата 31.3.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Доступные методы инициализации:
1) с использованием указателя на массив чаров в unsafe контексте
public SecureString(char* value, int length)
    Member of System.Security.SecureString

Summary:
Initializes a new instance of the System.Security.SecureString class from a subarray of System.Char objects.

Parameters:
value: A pointer to an array of System.Char objects.
length: The number of elements of value to include in the new instance.
2) или без параметров  smile 
public SecureString()
    Member of System.Security.SecureString

Summary:
Initializes a new instance of the System.Security.SecureString class.

Rififi, Или есть еще какие-то методы инициализации?

Со строкой я догадался только так делать:

Код

public class SuperSecure
        {
            SecureString secStr = new SecureString();
            public SuperSecure()
            {
                string str = "secure";
                foreach (char c in str)
                {
                    secStr.AppendChar(c);
                }
            }
}


Как я понимаю, без использования массива чаров или указателя на него, или передачи по одному чару, инициализировать SecureString не получиться.


Цитата(nmn @  5.3.2009,  21:22 Найти цитируемый пост)
а каким образом можно загрузить значение в SecureString минуя использование string? 


Выходит есть минимум два варианта:
1) использовать массив чаров и в цикле, используя метод AppendChar загонять массив в SecureString
2) в unsafe контексте создать массив чаров, получить указатель на него, размер массива и создать экзмепляр SecureString с этими параметрами

Или как-то можно еще?



--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
Rififi
Дата 31.3.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



Мурлыкатам_, 
Или есть еще какие-то методы инициализации?
Это был ответ nmn, 
он спрашивал, как загрузить значение в SecureString без использования string
ни один из способов инициализации/заполнения SecureString'а не использует класс string, поэтому можно выбирать любой
PM MAIL   Вверх
Мурлыкатам_
Дата 31.3.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Аааа... я так не играю  smile 

я просто читал по диагонали и не заметил слово "доступным"  smile 


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
nmn
Дата 31.3.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: 1
Всего: 1



ну например, пароль вводится в консоли, там придется использовать string
PM Skype   Вверх
Мурлыкатам_
Дата 1.4.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Но можно использовать и Console.ReadKey:

Код

ConsoleKeyInfo c = new ConsoleKeyInfo();
            char[] password = new char[15];
            Console.Write("Please enter password: ");
            int charIndex = 0;
            while (!c.KeyChar.Equals('\r'))
            {
                c = Console.ReadKey();
                if(charIndex > password.Length)
                {
                    // Handle situation
                    return;
                }
                password[charIndex] = c.KeyChar;
                charIndex++;
            }
            // foreach по массиву чаров, и AppendChar в SecureString != '\0'


И опять няма стринга smile

Се равно делать нечего:

Код

        private const short m_PasswordLength = 15;

        private static void GetSecurePassword(ref SecureString securePassword)
        {
            ConsoleKeyInfo keyInfo = new ConsoleKeyInfo();
            char[] password = new char[m_PasswordLength];
            Console.Write("Please enter password: ");
            int charIndex = 0;
            bool passwordLengthCorrect = true;

            while (!keyInfo.KeyChar.Equals('\r')) // пока не нажмут ентер, естественно бэк спэйс нужно юзать аккуратно :) вернее не юзать
            {
                keyInfo = Console.ReadKey();
                if (charIndex >= password.Length)
                {
                    Console.WriteLine("\nSorry, but password you have entered too long.. :-)");
                    passwordLengthCorrect = false;
                    break;
                }

                password[charIndex] = keyInfo.KeyChar;
                charIndex++;
            }

            if (!passwordLengthCorrect)
            {
                // немного рекурсии =)) 
                GetSecurePassword(ref securePassword);
            }
            else  // если сразу пароль нормальный по длине - аппендаем в секурную строку
            {
                foreach (char passwordChar in password)
                {
                    if (passwordChar.Equals('\r'))
                    {
                        break;
                    }

                    securePassword.AppendChar(passwordChar);
                }
            }
        }


Вызов из Main:

Код

SecureString securePassword = new SecureString();

GetSecurePassword(ref securePassword);


Это сообщение отредактировал(а) Мурлыкатам_ - 1.4.2009, 13:38


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
nmn
Дата 2.4.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: 1
Всего: 1



с консолью убедили, спасибо smile а gui?
PM Skype   Вверх
Мурлыкатам_
Дата 3.4.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



c GUI  smile 

Берешь и обрабатываешь KeyDown event (или че-нить в том же духе) smile в том контроле в который пишется, если это текст бокс, так еще и секурным его делаешь, чтобы нельзя было из него копировать ничего и чтобы чары менялись на звездочки =)

Но просто интересно, что же сделал тебе стринг? smile

ЗЫ:

KeyPress нуна обрабатывать smile

Код

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            char c = e.KeyChar;
            // Handle incorrect chars
            // SecureString.AppendChar :))))))
        }


Единственно, что нужно сразу понимать, какие возникнут проблемы если юзеры будут тискать бэк спэйсы и другие "не хорошие" кнопки и соответствующим образом это обработать.

ЗЫЗЫ:

А почему сразу не реализовать сканер сетчатки глаза?   smile 

Это сообщение отредактировал(а) Мурлыкатам_ - 3.4.2009, 18:03


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
nmn
Дата 3.4.2009, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: 1
Всего: 1



securestring был сделан чтобы пароли не лежали в памяти в открытом виде к тому же у программиста нет прямой возможности удалить пароль так как строки неизменяемы
может в gui есть специальный для этого контрол? ведь есть же в win32 специальное поле ввода для паролей
PM Skype   Вверх
PashaPash
Дата 3.4.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49





--------------------
PM MAIL WWW   Вверх
Мурлыкатам_
Дата 6.4.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Судя по комментам, контрол не адекватный. В личных целях 'for fun' может и сойдет smile


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.