2017-02-08 56 views
1

我目前正在研究一种简单的WinForms/C#应用程序,它以结构化和一致的方式存档数据。目标用户不具有对存档文件夹的写入权限,只能使用该应用程序进行写入。为用户模拟存储密码

由于用户不应该获得额外的权利,我需要为应用程序提供一些通用服务用户的凭据以启动用户模拟。因为用户不应该知道这些凭据,他们将不得不以某种方式存储(我更喜欢本地,因为我没有使用数据库和什么的经验)。 有没有任何方法可以安全地存储凭据,而不需要最终用户知道/做任何有关它们的事情?或者还有其他更好的解决这个问题的方法吗?

我知道关于密码存储的问题很频繁,我尽我所能找到了我的具体问题的答案,但是我能找到的所有线程都希望存储用户已知的密码。

+0

没有什么是绝对安全的,因为用户可以访问机器和应用程序。这是关于风险与奖励。你的用户是否会找到密码,如果你只是用base64编码它并将其隐藏在应用程序设置中?如果你加密了密码,他们能够反编译你的应用程序来找到密钥?如果一个简单的木栅栏足够,不要浪费大量的时间来建造Fort Knox ;-) – Equalsk

+0

在我看来,我被要求为此实现的安全级别是过度杀毒,因为应用程序将只被使用/可用给员工,如果他们想要找到有问题的密码,他们几乎不必去尝试 –

+0

App.config文件部分可以被框架加密并且无需手动解密即可访问。你可以利用这个来存储密码,以免窥探者很容易发现它。虽然卢安指出认为这样做仍然不是最好的主意。 – pinkfloydx33

回答

2

最安全的解决方案是真正创建一个服务,它具有正确权限的用户下运行。然后,您的Winforms应用程序就可以使用紧密的服务接口来告诉它需要做什么。这是多么的可行取决于你想要做什么。

试图做到这一点只使用winforms应用程序是棘手的。如果用户应用程序可以做些什么,用户也可以做些什么。请记住,没有“应用程序权限”这样的事情 - 只有用户权限。 GUI应用程序将以一些用户的身份运行,并且该用户可以执行应用程序可以执行的所有操作。

+0

我第二种方法。 – Zesty

+0

我会研究创建一个服务,但我不确定这是否是我的技能水平的任何人都可以轻松创建。目前,让用户可以在该目录下编写代码是一个想法,所以只使用winforms对我来说似乎合乎逻辑。 –

+0

@DominikS这是真正分离用户权限的唯一方法。但是可能更简单的方法对你也同样适用 - 例如,用户可以对文件夹拥有写入权限,但不能拥有他不拥有的文件或目录(例如,没有创建)。您甚至可以拥有一个服务,在完成写入时归档存档目录中的文件的所有权。但是,这一切都取决于您的要求是什么 - 我们只能帮助您解决具体问题,而不是软件设计:) – Luaan

0

您可以哈希密码,像下面

using System.Security.Cryptography; 

public static string EncodePasswordToBase64(string password) 
{ byte[] bytes = Encoding.Unicode.GetBytes(password); 
    byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes); 
    return Convert.ToBase64String(inArray); 
} 
+2

这有帮助...怎么样?你如何使用哈希密码来模拟Windows用户? – Luaan

+0

@rishit_s这是错误的。单向散列用于验证用户输入的密码,以避免存储它。您无法从哈希中生成密码,并且需要密码才能模拟帐户。你可以使用加密(而不是哈希),但我会采用Luaan的方法,因为这样更安全。 – Zesty