【问题标题】:Store password in portable application在便携式应用程序中存储密码
【发布时间】:2020-02-02 12:22:39
【问题描述】:

我正在开发便携式应用程序。你在闪存驱动器上的东西,可以随时使用。

问题是:我需要在应用程序中存储一些关键密码。 所以我想问一下什么是正确的方法?

密码需要在应用旁边或其他地方的xml设置文件中,但在不同的计算机上使用时仍需要加载设置。

但我希望用户无法轻松打开该设置文件(我可以使用设置加密文件吗?)然后我会有一些“解密密钥”作为密码,您每次想要更改或想要使用密码时都会使用该密码文件或一些不同的设置。

这是正确的,甚至是安全的吗?

我知道选项二是以密码形式将密码保存到设置 xml 文件中,但我希望人们在不知道密码的情况下无法打开该文件。

感谢所有答案或想法。

【问题讨论】:

    标签: c# xml passwords


    【解决方案1】:

    第一种方式 - 使用密码加密您的配置。

    1) 加密您的整个 XML 配置。
    2) 在程序启动时请求密码。
    3) 解密配置并加载。

    就这么简单。

    您可以使用RijndaelManaged 使用字符串密码来加密您的设置。

    字符串密码can be found here的现成实现。

    另外,我真的非常建议使用 SHA256/SHA512 对您的密码进行哈希处理,以使其更难被其他人暴力破解。

    优点:

    • 您无需访问互联网。
    • 像这样破解加密需要正确时间(如果你使用得当的话)

    缺点:

    • 任何人都可以暴力破解您的密码。因此,请使用强大的。

    第二种方式 - 从网络服务器下载您的密码

    设置一个接受您的密码并发送密码列表的网络服务器。

    始终使用 HTTPS!您的所有 wifi 连接都可以被嗅探/或MITM'ed!

    使用 SSL-pinning 来增强您的安全性!你可以找到more here

    优点:

    • 暴力破解密码真的很难。

    (例如,将您的服务器端脚本设置为仅在您工作时接受密码)

    缺点:

    • 当然,您需要访问互联网。
    • 您需要托管一个网站,获得 SSL 证书 (for example here, for free)
    • 有权访问您的网络服务器的人可以窃取您的密码。
    • 有权访问您设备的人可以安装伪造的根 SSL 证书来拦截您的流量。 (SSL pinning 可以帮到你!)

    【讨论】:

    • 嘿,好主意!只有一个问题:当我在启动和加载设置时使用密码解密文件时。我想我需要加密回来?或者我可以以某种方式解密它只是为了读取和文件仍然说当我关闭程序或它崩溃时加密,或类似的东西。
    • 首先将文件加载到内存中。 (File.ReadAllBytes),然后你在内存中解密并使用它。文件在驱动器上保持加密状态。
    • 但是内存不是文件,或者我可以以某种方式调用 xmlserializer 来获取内存流?或者我如何从 memorystream 中读取 xml 设置?
    • @JohnyCorbie XMLSerializer 应该支持从流中反序列化。另请看:stackoverflow.com/questions/30698349/…
    【解决方案2】:

    我对这个问题的解决方案如下。

    • 加密整个设置文件(您可以创建自己的 加密功能)并创建一个小型实用程序来更改设置。
    • 仅加密密码并使用小实用程序 更新/创建密码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      相关资源
      最近更新 更多