Подключение к сетевому диску с паролем, содержащим специальные символы в C# - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь подключиться к сетевому диску с помощью C#, который защищен паролем. Я попытался реализовать это в классе, который работает в принципе, потому что я протестировал его с пользователем, у которого есть пароль без специальных символов.

Соединение устанавливается через следующий исходный код:

Process pro = new Process();
// StorageLetter = A: for example
pro.StartInfo.Arguments = "use " + StorageLetter + @" \\" + IP + @"\c$\ /user:" + User + " " + Password + " /persistent:" + Persistent;
pro.StartInfo.FileName = "net";
pro.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
pro.StartInfo.CreateNoWindow = true;

pro.Start();

pro.WaitForExit();

Однако правильный пользователь имеет пароль со специальными символами (например: | s / 1 =; zw} ), и поэтому установление соединения не будет работать.

Здесь Я уже выяснил, что есть специальный синтаксис через командную строку. Я также пытался реализовать это:

private Dictionary<string, string> escapeSequenzToCharacters = new Dictionary<string, string>();

public PasswordModifier()
        {            
            escapeSequenzToCharacters.Add("^", "^");        // = ^
            escapeSequenzToCharacters.Add("\\", "\\\\");    // = \

            escapeSequenzToCharacters.Add("\"", "\"");      // = "
            escapeSequenzToCharacters.Add("%", "%");        // = %
            escapeSequenzToCharacters.Add("&", "^");        // = &
            escapeSequenzToCharacters.Add("<", "^");        // = <
            escapeSequenzToCharacters.Add(">", "^");        // = >
            escapeSequenzToCharacters.Add("|", "^");        // = |
            escapeSequenzToCharacters.Add("'", "^");        // = '
            escapeSequenzToCharacters.Add("`", "^");        // = `
            escapeSequenzToCharacters.Add(",", "^");        // = ,
            escapeSequenzToCharacters.Add(";", "^");        // = ;
            escapeSequenzToCharacters.Add("=", "^");        // = =
            escapeSequenzToCharacters.Add("(", "^");        // = (
            escapeSequenzToCharacters.Add(")", "^");        // = )
            escapeSequenzToCharacters.Add("!", "^^");       // = !
            escapeSequenzToCharacters.Add("[", "\\");       // = [
            escapeSequenzToCharacters.Add("]", "\\");       // = ]
            escapeSequenzToCharacters.Add(".", "\\.");      // = .
            escapeSequenzToCharacters.Add("*", "\\");       // = *
            escapeSequenzToCharacters.Add("?", "\\");       // = ?
        }


public string ModifyForBash(string password)
        {
            foreach (string key in escapeSequenzToCharacters.Keys)
            {
                if (password.Contains(key))
                    password = password.Replace(key, escapeSequenzToCharacters[key] + key);
            }

            return password;
        }

Он также возвращает правильно отредактированный пароль для моего понимания ( | s / 1 =; zw} = ^ | s / 1 ^ = ^; zw} ), но все равно не работает, когда я пытаюсь подключиться к нему.

Кроме того, теперь я также попробовал эти методы, но безуспешно:

Теперь я спрашиваю, как я могу это сделать в C#, что пароль со спецсимволами можно использовать без проблем?

1 Ответ

0 голосов
/ 28 апреля 2020

После некоторых исследований и тестов я нашел рабочее решение. С помощью этой публикации мое приложение теперь работает без ошибок.

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