【问题标题】:Connection to a network drive with a password containing special characters in C#使用包含 C# 中的特殊字符的密码连接到网络驱动器
【发布时间】:2020-04-28 06:05:14
【问题描述】:

我正在尝试使用受密码保护的 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}),因此无法建立连接。

这里我已经通过命令行发现了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;
        }

它还返回正确编辑的密码以供我理解(|s/1=;zw} = ^|s/1^=^;zw}),但是当我尝试连接它时它仍然不起作用。

另外,我现在也尝试了这些方法,但都没有成功:

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

【问题讨论】:

  • 尝试在密码两边加上双引号。或单身。
  • @xdtTransform 这也不起作用,不幸的是,' 和 " 都不起作用
  • 您是否尝试过直接调用 dll 而不是调用命令?我认为这可以避免一些特殊的字符问题。见stackoverflow.com/questions/3700871/…
  • 恐怕我必须修改我的声明...此方法仅适用于驱动器已在当前会话中安装一次的情况。但是如果我想安装一个全新的驱动器,它就行不通了。

标签: c# command-line windows-10 passwords network-drive


【解决方案1】:

经过一些研究和测试,我找到了一个可行的解决方案。在posting 的帮助下,我的应用程序现在可以正常运行了。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 2010-11-28
    • 2018-09-20
    相关资源
    最近更新 更多