Невозможно преобразовать строку в SecureString (при наборе VPN) - PullRequest
0 голосов
/ 15 апреля 2019

Итак, я получил код, который создает и подключает VPN в Windows 10, используя PowerShell и Radial.

Все работает просто отлично.

Но когда я хочу набрать VPN с учетными данными, введенными пользователем, я получаю сообщение об ошибке.

Это мой код:

Console.WriteLine("VPN Created.");
Console.WriteLine("Do you wanna connect? y/n");
string key = Console.ReadLine();

if (key == "y") {
    Console.WriteLine("Input username:");
    string username = Console.ReadLine();

    Console.WriteLine("Input password:");
    string password = Console.ReadLine();

    Console.WriteLine("Executing rasdial...");
    System.Diagnostics.Process.Start("rasdial.exe", "VPN_Arta {0} {1}", username, password);
}

Я получаю ошибку:

Невозможно преобразовать строку в System.Security.SecureString в строке с запуском rasdial.exe.

Ребята, вы знаете, как решить эту проблему?

1 Ответ

0 голосов
/ 16 апреля 2019

Итак, у меня все работает с обычной строкой, но теперь мне нужно сделать это в securestring с паролем маскировки.

Мой код выглядит так:

Console.WriteLine("Input username:");
            string username = Console.ReadLine();

            Console.WriteLine("Input password:");

            SecureString password = new SecureString();
            password = Classes.Functions.GetPassword();

            Classes.Functions.runProcRasdial("VPN_Arta", username, password);

            Console.Clear();
            Console.WriteLine("VPN Connected.");

Метод вызова rasdial:

public static Process runProcRasdial(string VPNName, string username, SecureString password)
    {

        ProcessStartInfo psi = new ProcessStartInfo("cmd")
        {
            RedirectStandardInput = true,
            RedirectStandardOutput = false,
            UseShellExecute = false
        };
        var proc = new Process()
        {
            StartInfo = psi,
            EnableRaisingEvents = true,
        };
        proc.Start();
        proc.StandardInput.WriteLine("rasdial {0} {1} {2}", VPNName, username, password);
        proc.StandardInput.WriteLine("exit");
        proc.WaitForExit();
        return proc;

    }

Способ маскировки пароля:

//mask password
    public static SecureString GetPassword()
    {
        var pwd = new SecureString();
        while (true)
        {
            ConsoleKeyInfo i = Console.ReadKey(true);
            if (i.Key == ConsoleKey.Enter)
            {
                break;
            }
            else if (i.Key == ConsoleKey.Backspace)
            {
                if (pwd.Length > 0)
                {
                    pwd.RemoveAt(pwd.Length - 1);
                    Console.Write("\b \b");
                }
            }
            else if (i.KeyChar != '\u0000' ) // KeyChar == '\u0000' if the key pressed does not correspond to a printable character, e.g. F1, Pause-Break, etc
            {
                pwd.AppendChar(i.KeyChar);
                Console.Write("*");
            }
            }
        return pwd;
    }

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

Ребята, есть идеи?

Спасибо

John

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...