1

我有一个 C# 服务需要以另一个用户身份运行一个进程(交互模式)。该用户是管理员级别的用户,我知道我不应该将密码作为字符串存储在代码中。

我可以使用一些帮助将我指向正确的方向,因为我所做的所有研究似乎都指向了大量似乎并不适合我想做的方法。

我是否需要将散列密码存储在配置文件中?我可以在代码中存储一个散列密码,然后有人将它传递给一个安全的字符串吗?我在这里感到有点迷茫,可以使用一些指导。

4

1 回答 1

1

如果我正确理解了问题,您需要明文密码,这样您就可以以另一个用户身份启动外部进程。这将排除密码哈希,因为您需要明文密码。

1)您可以做的最安全的事情可能是在服务启动时询问密码。只要服务启动,服务就可以将密码保存在内存中。

  • 这样,您根本不必将密码存储在硬盘上。
  • 缺点当然是服务启动时必须输入密码。

2) 如果您需要保留密码,没有绝对安全的方法,但 Windows 提供了一个 API 来解决这个问题,即数据保护 API (DPAPI)。它解决了一个问题,即如果不将密钥存储在某处,就无法加密密码(这引发了将密钥存储在哪里的问题......)。

using System.Security.Cryptography;

byte[] passwordBytes = Encoding.UTF8.GetBytes(plaintextPassword);
byte[] encryptedPassword = ProtectedData.Protect(passwordBytes, optionalEntropy, DataProtectionScope.LocalMachine);

使用此代码,Windows 将使用运行计算机的信息对密码进行加密。只有在这台计算机上运行的进程才能解密密码。

于 2017-03-20T09:05:13.540 回答