使用包含 C# 中特殊字符的密码连接到网络驱动器
Connection to a network drive with a password containing special characters in C#
我正在尝试使用受密码保护的 C# 连接到网络驱动器。
我尝试在原则上可行的 class 中实现它,因为我用密码没有特殊字符的用户对其进行了测试。
通过以下源代码建立连接:
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}),因此无法建立连接。
这里我已经通过命令行发现有一个special syntax。我也尝试过实现这个:
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;
}
它也是returns我理解的正确编辑的密码(|s/1=;zw} = ^|s/1^=^;zw}), 但是当我尝试连接它时它仍然不起作用。
另外,我现在也尝试了这些方法,但都没有成功:
现在我想问我如何在 C# 中做到这一点,可以毫无问题地使用带有特殊字符的密码?
经过一些研究和测试,我找到了一个可行的解决方案。在这个 posting 的帮助下,我的应用程序现在可以正常运行了。
我正在尝试使用受密码保护的 C# 连接到网络驱动器。 我尝试在原则上可行的 class 中实现它,因为我用密码没有特殊字符的用户对其进行了测试。
通过以下源代码建立连接:
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}),因此无法建立连接。
这里我已经通过命令行发现有一个special syntax。我也尝试过实现这个:
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;
}
它也是returns我理解的正确编辑的密码(|s/1=;zw} = ^|s/1^=^;zw}), 但是当我尝试连接它时它仍然不起作用。
另外,我现在也尝试了这些方法,但都没有成功:
现在我想问我如何在 C# 中做到这一点,可以毫无问题地使用带有特殊字符的密码?
经过一些研究和测试,我找到了一个可行的解决方案。在这个 posting 的帮助下,我的应用程序现在可以正常运行了。