使用包含C#中特殊字符的密码连接到网络驱动器



我正在尝试使用受密码保护的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}(,但当我尝试连接到它时,它仍然不起作用。

此外,我现在也尝试过这些方法,但没有成功:

  • https://stackoverflow.com/a/3700906/13422638
  • https://stackoverflow.com/a/22378883/13422638

现在我在问我如何在C#中做到这一点,用特殊字符的密码可以毫无问题地使用吗?

经过一些研究和测试,我找到了一个可行的解决方案。有了这个帖子的帮助,我的应用程序现在可以正常工作了。

最新更新