C# 应用程序密码的完整性

C# 应用程序密码的完整性,c#,visual-studio,security,password-protection,C#,Visual Studio,Security,Password Protection,有人知道如何在文本文件中安全地存储密码吗。我在C#in VS上有一个本地应用程序,带有登录窗口,我需要存储用户密码。我知道散列和加密,但问题是任何人都可以删除密码文件或更改其中的数据。有没有办法解决这个问题?我的攻击者模型是具有管理员权限的用户 谢谢大家!我通过运行一个保持文件打开的服务解决了这个问题,因此除非关闭该服务,否则您无法编辑或删除该文件。我认为这不是最好的解决方案,但它正在发挥作用。正如其他人所说,这取决于你的威胁模型。如果本地存储的密码将用于验证任何内容,则需要对其进行加密,并存储

有人知道如何在文本文件中安全地存储密码吗。我在C#in VS上有一个本地应用程序,带有登录窗口,我需要存储用户密码。我知道散列和加密,但问题是任何人都可以删除密码文件或更改其中的数据。有没有办法解决这个问题?我的攻击者模型是具有管理员权限的用户


谢谢大家!我通过运行一个保持文件打开的服务解决了这个问题,因此除非关闭该服务,否则您无法编辑或删除该文件。我认为这不是最好的解决方案,但它正在发挥作用。

正如其他人所说,这取决于你的威胁模型。如果本地存储的密码将用于验证任何内容,则需要对其进行加密,并存储在加密的数据库/文件中

您是否将此密码存储在本地以保存远程登录的用户密码

或者您存储此密码是为了实际验证用户登录数据吗(一般来说,您不想这样做,因为正如其他人所说,您不能信任用户端的文件。)

最好的解决方案是使用远程服务器存储密码,并验证登录数据

然而

没有一刀切的安全模型。它取决于您的需求、用户需求、您提供的服务类型以及相应的应用程序所需的安全级别。(MSN聊天帐户不需要与银行登录相同的安全性。

您最初的问题是如何防止用户编辑本地密码文件:

保存文件时需要对其进行加密。(还使用salt将存储的密码与sha256进行散列)

然后在应用程序中解密密码文件(在内存中),然后从中读取密码散列以在应用程序中使用。除此之外,您还可以远程存储文件/密码的解密密钥/密码。您的应用程序需要访问internet才能获取密钥/密码,然后解密本地文件/密码

更多阅读和代码参考:


扩展zaph注释:使用哈希

通过一个好的散列函数(SHA2)运行用户密码并存储散列

当用户输入密码并希望检查密码时,通过相同的散列函数运行他们的输入,看看是否得到相同的散列


这是更安全的,因为你没有存储可以转换回密码和被盗的东西

加密它们并将它们存储在数据库中存储在文件中在我看来不是很安全..你不能。。。。您无法控制用户将如何处理其系统上的文件。您不能信任攻击者可以修改的数据。什么是您的威胁模型?@MethodMan您将在哪里存储加密密钥?将密码保存在数据库中是一个非常糟糕的主意,至少应将密码以盐析和哈希方式保存。几乎可以,但不要使用哈希函数,使用HMAC或更好的PBKLDF2或bcrypt。如果您能够保守salt秘密(或者至少使其难以获取),攻击者将很难替换文件中的条目。1。您将在哪里保存加密文件的加密密钥?这移动了秘密,但增加了工作系数。2.“你不能信任用户端的文件”,但你也不能信任服务器端的文件!服务器至少需要2因素身份验证,并能很好地控制第二个因素。这取决于应用程序的安全级别。对于非常安全的东西,您不应该在本地存储任何密码数据。如果安全性优先级不高,则可以将(加密密码)作为(加密字符串)存储在(加密文件)中,并将(解密本地文件的密钥和密码)作为静态字符串存储在应用程序中。(很容易被反汇编。)但是,嘿,这个应用程序不是银行账户,对吗?我同意增加工作系数。在某些平台上,反汇编只能通过越狱、安装黑客工具、执行应用程序和检查内存中的代码来完成。请随意提出替代方案。我不是保安专业人员。只是个程序员。:)我并不反对。安全就是增加工作系数。代码嵌入的密钥可能很难访问。